OAuth2 интеграция refresh_token в asp.net webapi2 приложение
Обычно, access token имеет ограниченный срок годности. Это может быть полезно, например, если он передается по открытым каналам. Чтобы не заставлять пользователя проходить авторизацию после истечения срока действия access token'а, во всех перечисленных выше вариантах, в дополнение к access token'у может возвращаться еще refresh token. По нему можно получить access token с помощью HTTP-запроса, аналогично авторизации по логину и паролю. В этой статье мы рассмотрим как интегрировать refresh_token в webapi2 приложение, и использовать его в angular SPA приложении.
1) Создаем новый проект ASP .NET web application
Выбираем шаблон Web API
после того как проект был создан:
2) Подключаем CORS (Cross-origin resource sharing)
через nuget
Install-Package Microsoft.Owin.Cors
это нужно для того что бы, когда вы делали запрос с фронтенда, с другого домена, они не обрезались приложением,
- открываем файл Startup.cs
и дополняем существующий метод таким кодом
public void Configuration(IAppBuilder app)
{
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
ConfigureAuth(app);
}
3) Создаем TokenProvider для refresh_token, для этого добавим новый класс с таким кодом:
public class ApplicationRefreshTokenProvider : AuthenticationTokenProvider
{
public override void Create(AuthenticationTokenCreateContext context)
{
var expire = 1;
context.Ticket.Properties.ExpiresUtc = new DateTimeOffset(DateTime.UtcNow.AddDays(expire));
context.SetToken(context.SerializeTicket());
}
public override void Receive(AuthenticationTokenReceiveContext context)
{
context.DeserializeTicket(context.Token);
}
}
4) перейдем в файл Startup.Auth
и немного изменим код добавив туда интеграцию созданного класса ApplicationRefreshTokenProvider
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromSeconds(10),
// In production mode set AllowInsecureHttp = false
AllowInsecureHttp = true,
RefreshTokenProvider = new ApplicationOAuthProvider.ApplicationRefreshTokenProvider()
};
На этом создание asp.net web api части завершено,
Проект целиком вы можете просмотреть на github.
Вторую часть статьи где описывается интеграция refresh_token в angular spa приложение можно посмотреть здесь