首页 > 解决方案 > 如何在 AspNet.Security.OpenIdConnect.Server (ASOS) 中使用刷新令牌获取新的访问令牌

问题描述

我使用 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 Core 端完成它,以便在中间件或身份验证管道中检测访问令牌过期并返回新的访问令牌。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
}

我关注的链接如何使用带有 OpenId Connect 的刷新令牌https://github.com/mderriey/aspnet-core-token-renewal/blob/master/src/MvcClient/Startup 在 asp.net 核心中处理过期的访问令牌。 CS

标签: asp.net-core-webapiopenid-connect

解决方案


推荐阅读