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 OnGrantAuthorizationCodeprochaine, 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