0 1.8K ru

OAuth2 интеграция refresh_token в asp.net webapi2 приложение

Categories: 💻 Programming

Обычно, 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 приложение можно посмотреть здесь

Comments:

Please log in to be able add comments.