Wie aktualisiert Owin access-Token mit refresh-Token ohne neue refresh-token?
Habe ich es geschafft, ein einfaches Beispiel-code erstellen kann, eine Inhaber-token und fordern auch neue aktualisieren von token durch das Lesen anderer Foren hier auf stackoverflow.
Die startup-Klasse sieht wie folgt aus
public class Startup
{
public static void Configuration(IAppBuilder app)
{
app.UseOAuthBearerAuthentication(
new OAuthBearerAuthenticationOptions());
app.UseOAuthAuthorizationServer(
new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new OAuthAuthorizationServerProvider()
{
OnValidateClientAuthentication = async c =>
{
c.Validated();
},
OnGrantResourceOwnerCredentials = async c =>
{
if (c.UserName == "alice" && c.Password == "supersecret")
{
Claim claim1 = new Claim(ClaimTypes.Name, c.UserName);
Claim[] claims = new Claim[] { claim1 };
ClaimsIdentity claimsIdentity =
new ClaimsIdentity(
claims, OAuthDefaults.AuthenticationType);
c.Validated(claimsIdentity);
}
}
},
AccessTokenExpireTimeSpan = TimeSpan.FromSeconds(40),
AllowInsecureHttp = true,
RefreshTokenProvider = new ApplicationRefreshTokenProvider()
});
}
}
Und ich habe auch eine Klasse für refresh-Token, der wie folgt aussieht:
public class ApplicationRefreshTokenProvider : AuthenticationTokenProvider
{
public override void Create(AuthenticationTokenCreateContext context)
{
//Expiration time in seconds
int expire = 2 * 60;
context.Ticket.Properties.ExpiresUtc = new DateTimeOffset(DateTime.Now.AddSeconds(expire));
context.SetToken(context.SerializeTicket());
}
public override void Receive(AuthenticationTokenReceiveContext context)
{
context.DeserializeTicket(context.Token);
}
}
Ich verstehe es so, dass durch die Bereitstellung einer refresh token sollten Sie ein neues access token. Aber was happends in diesem code ist, dass wenn ich eine refresh token eine neue refresh token erstellt und zurückgegeben wird aswell. Ich will es schaffen sowohl eine Zugang und refresh token das erste mal als username/Kennwort zur Verfügung gestellt, aber es scheint nicht richtig zu erstellen, neue refresh Token jedesmal, wenn eine Anforderung für einen neuen access token mit refresh token?
Wenn ich zum Beispiel mit meinem code, habe einen 20 min Zeitspanne auf der access token und zwei Wochen auf der refresh Token, neue access Token konnten erstellt werden, alle 20 min, die ist gut, aber neue refresh Token würden auch alle 20 min, aber die letzten 2 Wochen. Viel refresh Token wäre dann erstellt, aber nicht verwendet.
Frage:
Habe ich nur angefangen zu Lesen/lernen über diese vor ein paar Stunden so bin ich ziemlich unsicher, aber ist dieses Verhalten korrekt oder soll ich cange mein code in einer Weise, nur erstellen, und geben Sie einen neuen access token wenn ein refresh token vorgesehen ist und nicht erstellen und geben Sie einen neuen refresh token auch? Jede Hilfe oder input wird sehr geschätzt, Dank!
InformationsquelleAutor mattias | 2016-03-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da niemand geantwortet hat, aber ich werde das zu bieten, was ich Tat und was ich Tue, was ich suchte. Daher werde ich akzeptieren, dass diese Antwort für jetzt.
Und in der ApplicationRefreshTokenProvider machte ich diese änderungen
Ich glaube, Sie haben die Lebensdauer des Token falsch herum. Das access-token sollte nur von kurzer Dauer (Sekunden bis Minuten) und die refresh-token sollte lange gelebt (1H - 1yr je nach Anforderungen). Dies verringert die Angriffsfläche von man in the middle-Angriffe wie jedes token Sie abzufangen ist nützlich für eine kurze Zeit. Da die refresh-Token verwendet werden, um neue access-Token kann ein Benutzer sich Abmelden verursacht refresh-Token für ungültig erklärt werden, wenn Sie denken, dass Sie kompromittiert wurden. Speicherung der refresh-Token sollte mit Sorgfalt behandelt werden.
InformationsquelleAutor mattias