Ich erhalte ein Access_Token und ID_Token von AzureAD für meine App, die OAuth2 mit dem impliziten Flow verwendet. Dies ist ein Beispiel-URL, wo ich die Token erhalten:Asp.Net - JWT Bearer Authentifizierung: Ungültige Signatur
Der Umfang ist openid https://grap.microsoft.com/user.read
.
Der Antworttyp ist id_token+token
.
Ich habe auch ein Asp.Net-Backend, das ich sichern möchte. Also verwende ich das Authorize
Attribut für meinen Controller und sende ein Token in der Kopfzeile wie folgt: "Authentication: Bearer THE_TOKEN".
Meine Konfiguration in Startup.cs
sieht wie folgt aus:
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"
});
Von dem, was ich gelesen habe, sollte das Zugriffstoken für diese verwendet werden, und die id_token das Frontend nicht verlassen sollte. Aber die Authentifizierung im Backend funktioniert in meinem Fall nur mit dem ID-Token. Das access_token kann nicht signiert werden Bearer error="invalid_token", error_description="The signature is invalid"
.
Mit Blick auf das access_token in jwt.io sehe ich, dass die Token unterschiedliche Zielgruppen und Emittenten haben. Die access_token zum Beispiel hat diese
"aud": "https://graph.microsoft.com",
"iss": "https://sts.windows.net/d67853c3-db96-4dac-a37b-f2bfb12b42d1/",
während die ID-Token dieses
"aud": "my_client_id",
"iss": "https://login.microsoftonline.com/my_tenant_id/v2.0",
hat
So scheint es mir, wurde die access_token irgendwie für die Graph API ausgegeben. Wäre froh, wenn mir jemand sagen könnte, was ich falsch mache oder wie ich versuchen kann, meine Probleme zu lösen.
bearbeiten: Es funktionierte wie beabsichtigt, bevor ich das Oszilloskop openid profile
verwendet. Aufgrund von Änderungen in Azure ist dieser Bereich jedoch nicht mehr gültig und Microsoft hat mich angewiesen, den oben genannten Bereich zu verwenden.
Vielen Dank! In der Zwischenzeit ging ich mit AD V1.0 und das funktionierte gut, weil ich dort eine Ressource angeben konnte. Also ich habe es jetzt woking, aber ich werde auch deine Lösung testen, wenn ich Zeit habe. – Hinrich