OWIN Porteur du Jeton d'Authentification
J'ai quelques questions relatives au Porteur du Jeton. Dans Owin vous pouvez protéger un billet Protect(ticket)
comme ceci:
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)
Maintenant le jeton sera quelque chose comme ceci:
nqak-9R6U64Owsm_lqn_mJzKc_Djd8iVnIw0EX77v5x2rybhf4m_zg_UnrsoO5BxDZQl0HWrSvvd4efa4ChNSf5rAGhd13aOXZlvwOJOZ5v_9bhRCq8A7tqHyiM6DqVVOyYs3lh2SU-wU1m85HH2IcYDtdTY3ijaKZ_QnP1nsqO5LRnnEL4upbETPW9zqWIZzZBX7_Y2cXi2v0K7WnlRor3gFKIZlU9J-NfidRpWXqq5744NfWWHalYADGS7eUWyuxPJCj9ykHYzaXFksJEXBw
Mes questions:
- Comment ce jeton est généré/crypté?
- Y a des chances que quelqu'un peut essayer de mess up avec le jeton et ajouter un peu de revendications personnalisées?
Exemple:
Si vous avez la chaîne de jeton que vous pouvez faire ceci:
AuthenticationTicket ticket = OAuthAuthorizationServerOptions.AccessTokenFormat.Unprotect(token);
Maintenant, vous pouvez ajouter des revendications. Par exemple, si il y a un role
réclamation auprès de la valeur user
vous pouvez modifier cette demande et ajouter admin
puis re encoder le billet et vous obtenez un jeton qui a au rôle d'administrateur.
J'ai effectivement din quelques tests, codé un jeton sur un serveur et ensuite essayer de le modifier sur un autre système, mais je ne pouvais pas Unprotect
. Donc je pense peut-être que le billet est chiffré/déchiffré à l'aide de la clé de l'ordinateur sur lequel a été initialement créé. Cependant, si j'essaie de Unprotect
à partir de la même machine, il fonctionne. Je peut le décrypter et de le modifier.
Quelqu'un peut-il expliquer ce processus, s'il vous plaît?
OriginalL'auteur David Dury | 2014-08-18
Vous devez vous connecter pour publier un commentaire.
Le fournisseur de protection des données peut être défini à l'aide de la
SetDataProtectionProvider
méthode d'extension sur leIAppBuilder
objet. Lorsque cela n'est pas fait, le fournisseur de protection des données de l'hôte est utilisé. En cas de IIS + ASP.NET, c'estMachineKeyDataProtector
dans l'assembléeMicrosoft.Owin.Host.SystemWeb
. Pour l'auto-hébergement, ce sera DPAPI. Fondamentalement, le jeton est chiffré puis MACed et c'est ce queProtect()
est tout au sujet.Pas. Ce n'est pas possible. Jeton protégé dans une machine ne peut pas être protégé quelque part d'autre. Une exception qui va être le cas d'une batterie de serveurs web où vous avez plusieurs machines. Une machine peut protéger et, si la demande en va vers une autre machine, cette machine devrait avoir la possibilité d'ôter la protection. Avec DPAPI, ce n'est pas possible. Avec
MachineKeyDataProtector
, c'est possible en ayant le mêmemachineKey
section dans toutes les machines. Mais alors, si vous êtes inquiet au sujet de certains MITM être capable de faire cela, alors non, il n'est pas possible.Que si l'homme, au centre, est le
Facebook
jeton, il peut emprunter l'identité d'un utilisateur?En savoir plus sur défaut de la protection des données des fournisseurs: msdn.microsoft.com/en-us/library/...
Voici un outil qui décrypte le protocole OAuth 2.0 Porteur de jetons à l'aide de
MachineKeyDataProtector
il convient de mentionner que l'outil exige le secret / machine à clé. jwt.io fait la même chose.
OriginalL'auteur Badri