我正在使用React作为客户端和Web API核心进行后端交互。 对于身份验证,我们使用 AspNet.Security.OpenIdConnect.Server(ASOS)使用基于令牌的身份验证。
我必须实现刷新令牌的方案,在访问令牌到期时,我们使用刷新令牌(由ASOS返回)来获取新的访问令牌。
我知道在客户端上调用方法的一种方法是在AXIOS拦截器中,如下所示。
httpPromise.interceptors.response.use(undefined, err => {
const { config, response: { status } } = err;
const originalRequest = config;
if (status === 401) {
var refresh_Token = JSON.parse(window.localStorage.getItem('refreshToken'));
fetch(globalConstant.WEB_API_BASE_PATH + "authtoken,
{
method: "POST",
headers: new Headers({
'Content-Type': 'application/json',
})
},
data:{grant-type:"refresh_Token",refresh_token:"refresh Token ....."
)
....other logic to set new access token and make call again to existing
request.
}
})
我想在 WEB API核心方面完成此操作,以便在中间件或身份验证管道中检测到访问令牌到期并返回新的访问令牌。 WEB API代码一览如下。
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
.... some code
serives.AddAuthentication(o =>
{
o.DefaultAuthenticateScheme = OAuthValidationDefaults.AuthenticationScheme;
})
serives.AddOAuthValidation()
serives.AddOpenIdConnectServer(options =>
{
options.ProviderType = typeof(AuthorizationProvider);
options.Provider = new AuthorizationProvider(new SecurityService());
options.TokenEndpointPath = "/authtoken";
options.UserinfoEndpointPath = "/userInfo";
options.AllowInsecureHttp = true;
options.ApplicationCanDisplayErrors = true;
});
..some code
}
我跟随的链接How to handle expired access token in asp.net core using refresh token with OpenId Connect和https://github.com/mderriey/aspnet-core-token-renewal/blob/master/src/MvcClient/Startup.cs