Я использую шаблон Web Api 2, который поставляется с Visual Studio 2013, в нем есть промежуточное ПО OWIN для аутентификации пользователей и тому подобное.
В OAuthAuthorizationServerOptions
я заметил, что сервер OAuth2 настроен для выдачи токенов, срок действия которых истекает через 14 дней.
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/api/token"),
Provider = new ApplicationOAuthProvider(PublicClientId,UserManagerFactory) ,
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
AllowInsecureHttp = true
};
Это не подходит для моего последнего проекта. Я хотел бы раздать недолговечные bearer_tokens, которые можно обновить с помощью refresh_token
Я много погуглил и не нашел ничего полезного.
Вот как далеко мне удалось зайти. Теперь я дошел до точки "Чего я сейчас делаю".
Я написал RefreshTokenProvider
, который реализует IAuthenticationTokenProvider
в соответствии со свойством RefreshTokenProvider
в классе OAuthAuthorizationServerOptions
:
public class SimpleRefreshTokenProvider : IAuthenticationTokenProvider
{
private static ConcurrentDictionary<string, AuthenticationTicket> _refreshTokens = new ConcurrentDictionary<string, AuthenticationTicket>();
public async Task CreateAsync(AuthenticationTokenCreateContext context)
{
var guid = Guid.NewGuid().ToString();
_refreshTokens.TryAdd(guid, context.Ticket);
// hash??
context.SetToken(guid);
}
public async Task ReceiveAsync(AuthenticationTokenReceiveContext context)
{
AuthenticationTicket ticket;
if (_refreshTokens.TryRemove(context.Token, out ticket))
{
context.SetTicket(ticket);
}
}
public void Create(AuthenticationTokenCreateContext context)
{
throw new NotImplementedException();
}
public void Receive(AuthenticationTokenReceiveContext context)
{
throw new NotImplementedException();
}
}
// Now in my Startup.Auth.cs
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/api/token"),
Provider = new ApplicationOAuthProvider(PublicClientId,UserManagerFactory) ,
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(2),
AllowInsecureHttp = true,
RefreshTokenProvider = new RefreshTokenProvider() // This is my test
};
Так что теперь, когда кто-то запрашивает bearer_token
, я отправляю refresh_token
, и это здорово.
Итак, как мне использовать этот refresh_token для получения нового bearer_token
, предположительно, мне нужно отправить запрос в конечную точку моего токена с некоторыми определенными установленными заголовками HTTP?
Просто думаю вслух, пока печатаю ... Должен ли я обрабатывать истечение срока действия refresh_token в моем SimpleRefreshTokenProvider
? Как клиент получит новый refresh_token
?
Я действительно мог бы использовать некоторые материалы для чтения / документацию, потому что я не хочу ошибаться и хотел бы следовать некоторому стандарту.