OWIN-Inhaber-Token-Authentifizierung
Ich habe einige Fragen zum Inhaber-Token. In Owin können Sie ein Ticket schützenProtect(ticket)
so was:
ClaimsIdentity identity = new ClaimsIdentity(Startup.OAuthServerOptions.AuthenticationType);
identity.AddClaim(new Claim(ClaimTypes.Name, user.UserName));
Dictionary<string, string> properties = new Dictionary<string, string>();
properties.Add("UserId", user.Id);
properties.Add("UserName", user.UserName);
properties.Add("Role", "user");
AuthenticationProperties properties = new AuthenticationProperties(properties);
AuthenticationTicket ticket = new AuthenticationTicket(identity, properties);
DateTime currentUtc = DateTime.UtcNow;
DateTime expireUtc = currentUtc.Add(TimeSpan.FromHours(24));
ticket.Properties.IssuedUtc = currentUtc;
ticket.Properties.ExpiresUtc = expireUtc;
string token = OAuthAuthorizationServerOptions.AccessTokenFormat.Protect(ticket)
Jetzt wird das Token ungefähr so aussehen:
nqak-9R6U64Owsm_lqn_mJzKc_Djd8iVnIw0EX77v5x2rybhf4m_zg_UnrsoO5BxDZQl0HWrSvvd4efa4ChNSf5rAGhd13aOXZlvwOJOZ5v_9bhRCq8A7tqHyiM6DqVVOyYs3lh2SU-wU1m85HH2IcYDtdTY3ijaKZ_QnP1nsqO5LRnnEL4upbETPW9zqWIZzZBX7_Y2cXi2v0K7WnlRor3gFKIZlU9J-NfidRpWXqq5744NfWWHalYADGS7eUWyuxPJCj9ykHYzaXFksJEXBw
Meine Fragen:
Wie wird dieses Token generiert / verschlüsselt?
Besteht die Möglichkeit, dass jemand versucht, den Token zu verfälschen und ihm einige benutzerdefinierte Ansprüche hinzuzufügen?
Beispiel:
Wenn Sie die Token-Zeichenfolge haben, können Sie dies tun:
AuthenticationTicket ticket = OAuthAuthorizationServerOptions.AccessTokenFormat.Unprotect(token);
Jetzt können Sie benutzerdefinierte Ansprüche hinzufügen. Zum Beispiel, wenn es eine gibtrole
Anspruch mit Wertuser
Dann können Sie diesen Anspruch ändern und hinzufügenadmin
Anschließend wird das Ticket neu codiert und Sie erhalten ein Token mit Administratorrolle.
Ich habe tatsächlich einige Tests durchgeführt, ein Token auf einem Server codiert und dann versucht, es auf einem anderen System zu ändern, konnte es aber nichtUnprotect
es. Daher denke ich, dass das Ticket möglicherweise mit dem Maschinenschlüssel, auf dem es ursprünglich erstellt wurde, verschlüsselt / entschlüsselt wird. Aber wenn ich es versucheUnprotect
es von der gleichen Maschine funktioniert. Ich kann es entschlüsseln und ändern.
Kann mir bitte jemand diesen Vorgang erklären?