Authorization_code subvention de flux sur Owin.De sécurité.OAuth: retourne invalid_grant
Je suis en train de configurer mon authentification à l'aide de la authorization_code
subvention de flux. Je l'avais déjà travailler avec grant_type=password
, donc je sais comment les choses est censé fonctionner. Mais lors de l'utilisation de grant_type=authorization_code
, je ne pouvais pas le faire revenir à autre chose que de invalid_grant
Voici ma configuration:
app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/auth/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(5),
Provider = new SampleAuthProvider()
});
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
{
AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,
AuthenticationType = "Bearer"
});
SampleAuthProvider est la classe suivante: https://gist.github.com/anonymous/8a0079b705423b406c00
Fondamentalement, c'est juste la journalisation de chaque étape et de le valider. J'ai essayé la requête:
POST http://localhost:12345/auth/token
grant_type=authorization_code&code=xxxxxx&client_id=xxxxx&redirect_uri=https://xxxx.com/
Content-Type: application/x-www-form-urlencoded
Il la traverse:
OnMatchEndpoint
OnValidateClientAuthentication
Et c'est tout. Je m'attendais à appeler OnValidateTokenRequest
et OnGrantAuthorizationCode
prochaine, mais il n'a tout simplement pas. Je n'ai aucune idée pourquoi.
La xxxx
's dans la demande ne sont pas des espaces réservés, je l'ai essayé comme ça. Peut-être que le middleware fait quelques vérifications sur son propre et rejette la demande à cause de qui? J'ai essayé des variantes de la redirect_uri
avec http
, sans protocole, sans slash...
Il fonctionne aussi correctement avec un custom grant_type
. Ainsi si j'ai trop désespéré, je suppose que je peux l'utiliser pour simuler authorization_code
, mais je préfère ne pas avoir à le faire.
TL;DR
Mon OAuthAuthorizationServerProvider
retourne {"error":"invalid_grant"}
après OnValidateClientAuthentication
lors de l'utilisation de grant_type=authorization_code
.
- Pourquoi est-il s'en arrêter là?
- Comment puis-je faire la fichue chose de travail?
Merci pour votre aide!
Modifier
Comme l'a souligné RajeshKannan, j'ai fait une erreur dans ma configuration. Je n'ai pas fournir une AuthorizationCodeProvider
instance. Pourtant, cela n'a pas de résoudre complètement le problème, étant donné que dans mon cas, le code n'est pas délivré par le AuthorizationCodeProvider
, et je ne peux pas juste le désérialiser. Je avez répondu avec la solution de contournement que j'ai obtenu de travail.
OriginalL'auteur dgn | 2014-07-01
Vous devez vous connecter pour publier un commentaire.
Voici ce que j'ai eu à travailler. Je ne suis pas complètement à l'aise avec cette solution, mais il fonctionne et doit aider les autres à résoudre leurs problèmes.
Donc, le problème est que je n'ai pas mis le
AuthorizationCodeProvider
de la propriété. Lorsqu'une demande avecgrant_type=authorization_code
est reçu, le code doit être validé par le code du fournisseur. Le cadre suppose que le code a été adopté par le code fournisseur, mais ce n'est pas mon cas. Je l'obtenir à partir d'un autre serveur et envoyer le code de retour pour validation.Dans le cas standard, où vous êtes aussi à la délivrance du code, le lien fourni par RajeshKannan décrit tout ce que vous avez à faire.
C'est ici que vous devez définir la propriété:
Et la déclaration de la
MyAuthorizationCodeProvider
classe:Désolé, j'ai arrêté de travailler sur ce projet, donc je n'ai pas d'autres mises à jour sur ce sujet. Cette solution a bien fonctionné. L'API est juste conçu avec d'autres cas d'utilisation à l'esprit. Peut-être dans les futures mises à jour qui sera faisable sans codé en dur clés, des moulages et co.
OriginalL'auteur dgn
Assurez-vous que vous avez configuré votre serveur d'autorisation d'options.
Je pense que vous devez fournir à votre autoriser un point de détails:
Dans le lien ci-dessous, le code d'autorisation de la subvention sera expliqué en détail et listes de la méthode qui ont été impliqués dans le code d'autorisation de la subvention du cycle de vie.
Owin serveur d'autorisation Oauth
OriginalL'auteur RajeshKannan
J'ai eu le même message d'erreur. Des choses qui me manquait:
OAuthAuthorizationServerOptions.AuthorizationCodeProvider
selon la la documentation.client_id
comme un paramètre lors d'une demande pour le jeton d'extrémité comme vous l'avez fait quand vous avez reçu leauthorization_code
.OAuthAuthorizationServerProvider.ValidateClientAuthentication
et dans l'appel de cette méthodecontext.TryGetFormCredentials
. Ceci définit la propriétécontext.ClientId
à la valeur de laclient_id
GET-paramètre. Cette propriété doit être défini, sinon vous obtiendrez leinvalid_grant
erreur. Aussi, appelezcontext.Validated()
.Après avoir fait toutes les ci-dessus, j'ai enfin pu échanger le
authorization_code
à unaccess_token
au jeton de point de terminaison.OriginalL'auteur Gebb
Grâce scénario, Mon code était manquant à la suite de deux valeurs requises. Posté ici au cas où d'autres trouvent cela utile:
OriginalL'auteur mkaj