J'obtiens un access_token et un id_token d'AzureAD pour mon application, qui utilise OAuth2 avec le flux implicite. Ceci est un exemple d'URL où j'obtenir les jetons:Asp.Net - Authentification au porteur Jwt: Signature non valide
Le champ d'application est openid https://grap.microsoft.com/user.read
.
Le type de réponse est id_token+token
.
J'ai aussi un backend Asp.Net, je veux sécuriser. J'utilise donc l'attribut Authorize
pour mon contrôleur et envoie un jeton dans l'en-tête comme ceci: "Authentification: Porteur THE_TOKEN".
Ma configuration Startup.cs
ressemble à ceci:
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
Authority = string.Format("https://login.microsoftonline.com/{0}/v2.0/",
"d67853c3-db96-4dac-a37b-f2bfb12b42d1"),
Audience = "8422b3fb-5612-4fdd-a90f-707d7218de57"
});
D'après ce que j'ai lu, le jeton d'accès doit être utilisé pour cela, et le id_token ne doit pas quitter le frontend. Mais l'authentification dans le backend ne fonctionne qu'avec le jeton d'identification dans mon cas. Le paramètre access_token ne peut pas être signé Bearer error="invalid_token", error_description="The signature is invalid"
.
En regardant le access_token dans jwt.io, je vois que les jetons ont des audiences et des émetteurs différents. Le access_token par exemple a ce
"aud": "https://graph.microsoft.com",
"iss": "https://sts.windows.net/d67853c3-db96-4dac-a37b-f2bfb12b42d1/",
alors que le jeton d'identification a ce
"aud": "my_client_id",
"iss": "https://login.microsoftonline.com/my_tenant_id/v2.0",
Il me semble, la access_token a été en quelque sorte délivré pour l'API graphique. Serait heureux si quelqu'un pouvait me dire, ce que je fais mal ou comment je peux essayer de résoudre mes problèmes.
modifier: Il fonctionnait comme prévu auparavant lorsque j'ai utilisé la portée openid profile
. Mais en raison de changements dans Azure, cette portée n'est plus valide et Microsoft m'a demandé d'utiliser la portée mentionnée ci-dessus.
Merci! En attendant, je suis allé avec AD V1.0 et cela a bien fonctionné, car là, je pourrais spécifier une ressource. Je l'ai donc maintenant en train de me réveiller, mais je testerai aussi votre solution quand j'en aurai le temps. – Hinrich