Używam szablonu Web Api 2, który jest dostarczany z programem Visual Studio 2013, zawiera oprogramowanie pośredniczące OWIN do uwierzytelniania użytkowników i tym podobne.
W OAuthAuthorizationServerOptions
zauważyłem, że serwer OAuth2 jest skonfigurowany do wydawania tokenów, które wygasają za 14 dni
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
};
To nie jest odpowiednie dla mojego najnowszego projektu. Chciałbym wręczyć krótkotrwałe bearer_tokens, które można odświeżyć za pomocą plikurefresh_token
Dużo szukałem w Google i nie mogę znaleźć nic pomocnego.
A więc tak daleko udało mi się dotrzeć. Dotarłem teraz do punktu „WTF do I teraz”.
Napisałem, RefreshTokenProvider
że implementuje się IAuthenticationTokenProvider
zgodnie z RefreshTokenProvider
właściwością w OAuthAuthorizationServerOptions
klasie:
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
};
Więc teraz, kiedy ktoś prosi o a bearer_token
, teraz wysyłam refresh_token
, co jest świetne.
Jak więc teraz użyć tego refresh_token, aby uzyskać nowy bearer_token
, prawdopodobnie muszę wysłać żądanie do mojego punktu końcowego tokenu z określonymi określonymi nagłówkami HTTP?
Po prostu głośno myślę, kiedy piszę ... Czy powinienem obsłużyć wygaśnięcie tokena refresh_token w moim SimpleRefreshTokenProvider
? W jaki sposób klient uzyskałby nowego refresh_token
?
Naprawdę przydałby mi się materiał do czytania / dokumentacja, ponieważ nie chcę tego pomylić i chciałbym przestrzegać jakiegoś standardu.