Web API 2 OWIN Porteur du Jeton but de cookie?
Je suis en train d'essayer de comprendre les nouvelles OWIN Porteur du Jeton d'authentification dans le processus de la Single Page App modèle MVC 5. S'il vous plaît corrigez-moi si je me trompe, pour le OAuth mot de passe d'authentification du client débit, Porteur du Jeton d'authentification fonctionne en vérifiant l'adresse http de demande d'autorisation d'en-tête pour le Porteur jeton d'accès de code pour voir si une demande est authentifié, il ne fait pas appel à témoin pour vérifier si une demande particulière est authentifié.
Selon ce post:
OWIN Porteur du Jeton d'Authentification avec l'API Web de l'Échantillon
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
using (IdentityManager identityManager = _identityManagerFactory.CreateStoreManager())
{
if (!await identityManager.Passwords.CheckPasswordAsync(context.UserName, context.Password))
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return;
}
string userId = await identityManager.Logins.GetUserIdForLocalLoginAsync(context.UserName);
IEnumerable<Claim> claims = await GetClaimsAsync(identityManager, userId);
ClaimsIdentity oAuthIdentity = CreateIdentity(identityManager, claims,
context.Options.AuthenticationType);
ClaimsIdentity cookiesIdentity = CreateIdentity(identityManager, claims,
_cookieOptions.AuthenticationType);
AuthenticationProperties properties = await CreatePropertiesAsync(identityManager, userId);
AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
context.Validated(ticket);
context.Request.Context.Authentication.SignIn(cookiesIdentity);
}
}
La GrantReourceOwnerCredentials fonction non seulement de composer le billet avec cette ligne: le contexte.Validé(billet), mais elle doit aussi composer un témoin de l'identité et de lui le témoin de cette ligne: le contexte.Demande.Contexte.L'authentification.SignIn(cookiesIdentity);
Donc mes questions sont, quel est exactement le but de ce cookie dans cette fonction? Ne pas le AuthenticationTicket être assez bon pour objectif de l'authentification?
- Lien de votre post fait référence à la a changé, maintenant c'est blogs.msdn.microsoft.com/webdev/2013/09/20/...
Vous devez vous connecter pour publier un commentaire.
Dans le SPA de modèle il y a en fait deux mécanismes d'authentification activé l'authentification par cookie et un jeton d'authentification. Cela permet l'authentification des deux MVC et Web API actions de contrôleur, mais nécessite une configuration supplémentaire.
Si vous regardez dans le WebApiConfig.Méthode Register, vous verrez cette ligne de code:
Qui raconte l'API Web pour ignorer l'authentification par cookie, ce qui évite une foule de problèmes qui sont expliquées dans le le lien que vous avez posté votre question:
Donc, maintenant, avec l'appel à
config.SuppressDefaultHostAuthentication()
Web d'appels d'API qui nécessitent une autorisation ignore le cookie est automatiquement envoyé avec la demande et la recherche d'une en-tête d'Autorisation qui commence par "au Porteur". Contrôleurs MVC va continuer à utiliser l'authentification par cookie et sont ignorants de l'authentification par jeton mécanisme que ce n'est pas un très bon ajustement pour la page web d'authentification pour commencer.L'existence du cookie aussi m'a laissé perplexe, car il n'est clairement pas nécessaire dans un porteur du jeton d'authentification scénario... Dans cette post de l'auteur dissèque les comptes individuels de modèle, et a ceci à dire à propos du cookie:
Ma conjecture est que les auteurs du modèle voulu montrer des exemples de différents types de logique d'authentification, et dans ce cas particulier, ils ont voulu montrer comment les informations d'authentification peut être stockée à la fois le porteur du jeton d'authentification de la charge utile JSON, ainsi comme dans un cookie d'authentification.
Le fait que le JSON l'authentification de la charge utile est définie également inclure une autre (inutile) non chiffré de la propriété (l'id de l'utilisateur), en plus du ticket chiffré, semble à l'appui de cette théorie:
Il semble que les auteurs du modèle voulu donner quelques exemples, plutôt que le strict minimum nécessaire pour obtenir porteur du jeton d'authentification. Cela est également mentionné dans le message lié ci-dessus.
Le cookie est un objectif important. Sa valeur contient le porteur du jeton qui peut être extraite par côté client javascript sur vos pages. Cela signifie que si l'utilisateur appuie sur la touche F5 ou actualise la page, le cookie sera généralement persistent. Votre javascript côté client peut alors saisir le porteur du jeton à partir du cookie lorsque la page est actualisée.