[英]How to re generate access_token in Oauth2.0 with refresh_token
我們使用 Spring Cloud Netflix Zull 作為后端服務的網關應用程序。 前端是 Angular。 但我們僅在 Postman 中測試端點(前端正在開發中)。 我們有一個名為LoginServiceModule
模塊,另一個是ZullServerModule
。 LoginSericeModuke
從前端獲取用戶名和密碼,並通過包含所需的標頭和正文來調用以下 oauth/token 端點。
http://localhost:XXXX/login
和回應是
{
"access_token": "XXXXXXXXX",
"token_type": "bearer",
"refresh_token": "XXXXXXXXX",
"expires_in": 3600,
"scope": "read write",
"jti": "XXXXXXXXXXX"
}
ZullServerModule
包含 ZullServerConfiguration、Authorization Server Configuration 和 Resource Server Configuration 等...
LoginModule
像這樣在內部調用 oauth/token 端點。
ResponseEntity<String> loginResponse = restTemplate.exchange("http://localhost:XXXX/oauth/token", HttpMethod.POST, entity, String.class);
和回應是..
{
"access_token": "XXXXXXXXX",
"token_type": "bearer",
"refresh_token": "XXXXXXXXX",
"expires_in": 3600,
"scope": "read write",
"jti": "XXXXXXXXXXX"
}
我們從響應中提取 access_token 並調用以下端點...
http://localhost:XXXX/ProjectName/api/endpointname?access_token={access_token}.
但是當 access_token 過期時,當我訪問上述后端服務 url 時,它說
{
"error": "invalid_token",
"error_description": "Access token expired:XXXXXXXXXXXXXXX(access_token)"
}
我知道它已過期並嘗試在終端中像這樣借助 refresh_token 重新生成 access_token
curl clientID:clientSecret@localhost:XXXX/oauth/token -d grant_type=refresh_token -drefresh_token={refresh_token}
但是我需要將它包含在我們的代碼中並且不知道將它放在哪里。 在網上搜索后,我遇到了ZullFilter
。 我嘗試了所有前置、路由和后置過濾器。 對於每個請求,它們都被執行(即只要 access_token 沒有過期),但是當令牌過期並且如果我測試端點時,沒有任何過濾器被執行並且我收到錯誤響應
{
"error": "invalid_token",
"error_description": "Access token expired: XXXXXXXXXX"
}
我已經在每個過濾器的運行方法中放置了 sysouts。 我也不太了解 filterOrder 。
@Override
public Object run() throws ZuulException {
System.out.println("pre filter...");
RequestContext context =
RequestContext.getCurrentContext();
HttpServletResponse response = context.getResponse();
System.out.println(response.getStatus());
return null;
}
我想在 refresh_token 的幫助下控制 access_token 的生成。 我如何編碼,每當 access_token 過期時,如果我在過期后訪問資源,那么我就會知道該令牌已過期並重新生成 access_token 並使用新的 access_token 調用之前的調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.