Я использую 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
}
Ссылки, по которым я следовал Как обрабатывать токен с истекшим сроком доступа в ядре asp.net, используя токен обновления с OpenId Connect и https://github.com/mderriey/aspnet-core-token-renewal/blob/master/src/MvcClient/Startup.cs