Ich verwende die Web Visual API 2-Vorlage, die mit Visual Studio 2013 geliefert wird. Sie verfügt über eine OWIN-Middleware für die Benutzerauthentifizierung und dergleichen.
In der habe OAuthAuthorizationServerOptions
ich festgestellt, dass der OAuth2-Server so eingerichtet ist, dass Token ausgegeben werden, die in 14 Tagen ablaufen
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
};
Dies ist nicht für mein aktuelles Projekt geeignet. Ich möchte kurzlebige bearer_tokens verteilen, die mit a aktualisiert werden könnenrefresh_token
Ich habe viel gegoogelt und kann nichts hilfreiches finden.
So weit bin ich also gekommen. Ich habe jetzt den Punkt "WTF mache ich jetzt" erreicht.
Ich habe eine geschrieben RefreshTokenProvider
, die IAuthenticationTokenProvider
gemäß der RefreshTokenProvider
Eigenschaft auf OAuthAuthorizationServerOptions
Klasse implementiert :
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
};
Wenn also jemand eine anfordert, bearer_token
sende ich jetzt eine refresh_token
, was großartig ist.
Wie verwende ich nun dieses refresh_token, um ein neues zu erhalten bearer_token
? Vermutlich muss ich eine Anfrage an meinen Token-Endpunkt senden, wobei bestimmte HTTP-Header festgelegt sind.
Ich denke nur laut nach, während ich tippe ... Soll ich den Ablauf von refresh_token in meinem behandeln SimpleRefreshTokenProvider
? Wie würde ein Kunde einen neuen erhalten refresh_token
?
Ich könnte wirklich etwas Lesematerial / Dokumentation gebrauchen, weil ich das nicht falsch verstehen möchte und einer Art Standard folgen möchte.