La modification d'OWIN OAuth middleware à utiliser JWT porteur de jetons
Je suis en train d'essayer de créer une preuve de concept pour l'authentification basée sur les revendications pour une nouvelle application en utilisant une combinaison de technologies suivantes: API Web 2, OWIN middleware et JWT.
Pour garder les choses simples, j'ai commencé avec le Web API 2 modèle de projet et changé l'authentification Individuelle des Comptes d'Utilisateur. L'exemple de client, j'ai créé a ensuite été en mesure d'obtenir un jeton en appelant /Jeton et a été en mesure d'appeler un échantillon d'extrémité avec OAuth porteur du jeton. So far So good. Ensuite, j'ai ajouté le code suivant au Démarrage.Auth.cs d'essayer et de permettre JwtBearerAuthentication:
var jwtOptions = new JwtBearerAuthenticationOptions
{
AllowedAudiences = audiences,
IssuerSecurityTokenProviders = new[] {
new SymmetricKeyIssuerSecurityTokenProvider(issuer, signingKey) }
};
app.UseJwtBearerAuthentication(jwtOptions);
J'attendais qu'Web API 2 serait de commencer à retourner JWTs à partir de l'appel à /Jeton, mais il ne semble pas avoir fait quoi que ce soit. J'ai été frapper ma tête contre ce pour quelques jours, sans succès et les documents Microsoft ne sont pas très à l'aise.
J'ai aussi essayé d'ajouter ce qui suit à mon OAuthAuthorizationServerOptions
AuthorizationCodeFormat = new JwtFormat(audience, new SymmetricKeyIssuerSecurityTokenProvider(issuer, signingKey))
Je pourrais aussi essayer de faire la chose de complètement faux.
Toutes les idées seraient grandement appréciés.
Avez-vous un moyen de changer l'émission de JWT à l'aide de votre propre ISecureDataFormat mise en œuvre?
Avez-vous jamais résoudre ce problème? Je commence à chercher à faire la même chose maintenant.
oui. A fini par créer un personnalisé AccessTokenFormat basé sur ISecureDataFormat<AuthenticationTicket>. L'ôter la protection de la méthode est semblable à la suivante: katanaproject.codeplex.com/SourceControl/latest#src/... et nous avons mis en œuvre appropriée de protéger méthode.
OriginalL'auteur James O'Sullivan | 2014-03-05
Vous devez vous connecter pour publier un commentaire.
Bien, maintenant, il y a un réglage sur
OAuthAuthorizationServerOptions
que vous pouvez spécifier le format de votre jeton d'accès, pas le code d'autorisation, comme vous êtes en train de faire sur vous exemple.Donc, au lieu de:
Vous devriez avoir:
OriginalL'auteur João Silva
Windows Identity Foundation utilise un propriétaire jeton format, pas de JWT. Le JWT code que vous voyez ci-dessus est pour consommer jetons, ne générant pas d'eux. Il y a une discussion utile sur les ASP.NET forums.
Cependant, dans la seconde moitié de 2014, Microsoft a publié officiellement le soutien de JWT dans Windows Identity foundation, avec le JSON Web Gestionnaire de Jeton. Vous devriez être en mesure d'installer et d'utiliser ce package pour résoudre le problème que vous avez décrit.
OriginalL'auteur sfuqua
Je ne pense pas qu'il y a de toute façon actuelle de modifier la manière dont le jeton est sortie dans la réponse. J'ai pris un coup d'oeil à la OAuthAuthorizationServerHandler dans le Katana référentiel de code source.
Vous verrez que dans la InvokeTokenEndpointAsync méthode, il y a une section qui crée un JsonTextWriter qui génère la réponse. Il n'est pas fait d'une façon telle que toute sorte d'extension de l'affecter.
Je trouve cela frustrant aussi. Microsoft bibliothèque doit disposer d'un moyen de facilement remplacer la réponse de la sérialisation. Vous ne pouvez même ajouter vos propres paramètres personnalisés pour la réponse.
OriginalL'auteur user3487070
Vous pouvez utiliser cet exemple de https://github.com/thinktecture/Thinktecture.IdentityModel/tree/master/samples/OAuth2/EmbeddedResourceOwnerFlow
pour écrire logique d'authentification dans votre projet.
Après cela, vous devez ajouter un attribut [Authorize] pour chaque contrôleur ou une action qui requiert l'autorisation(OWIN Katana contient la logique de la validation de jeton, d'autorisation et de quelques autres choses utiles).
OriginalL'auteur Sargis Koshkaryan