Wie kann ich das OWIN konfigurieren, um eine Access-Anfrage zu authentifizieren, die von Azure AD mithilfe von Node-Adal gesammelt wurde?Konfigurieren von Azure AD OAuth2 mithilfe von Node-Adal und OWIN?
Startup-Klasse unter:
app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
AllowedAudiences = new []
{
ConfigurationManager.AppSettings["ida:ClientId"] // AAD clientid from registered application
},
IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[]
{
new SymmetricKeyIssuerSecurityTokenProvider(
ConfigurationManager.AppSettings["ida:Issuer"], // https://sts.windows.net/<tenantid-guid>/ retrieved from AAD federationmetadata.xml
TextEncodings.Base64Url.Decode(ConfigurationManager.AppSettings["ida:ClientSecret"]) // AAD secret from registered application
)
}
});
Token Antwort von Knoten-adal unten: implementation described here
{
tokenType: "Bearer",
expiresIn: 3599,
expiresOn: "2016-10-19T13:49:47.649Z",
resource: "spn:00000002-0000-0000-c000-000000000000",
accessToken: "removed for brevity",
refreshToken: "removed for brevity",
userId: "[email protected]",
isUserIdDisplayable: true,
familyName: "familyName",
givenName: "givenName",
identityProvider: "live.com",
oid: "oid-guid",
tenantId: "tenantid-guid"
}
Die accesstoken
aus der obigen Knoten-adal Reaktion wird unter Verwendung von
Authorization: Bearer accesstoken-here
zu einem gesicherten Endpunkt ein [Authorize]
Attribut, das
{"message":"Authorization has been denied for this request."}
EDIT kehrt alter und neuer Ansatz zu zeigen, alte Werke - neu nicht
// this is new version (using clientsecret, aka AD web app)
var issuer = ConfigurationManager.AppSettings["ida:Issuer"];
var secret = TextEncodings.Base64Url.Decode(ConfigurationManager.AppSettings["ida:ClientSecret"]);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
{
AuthenticationMode = AuthenticationMode.Active,
AuthenticationType = OAuthDefaults.AuthenticationType,
Provider = new OAuthBearerAuthenticationProvider(),
AccessTokenFormat = new JwtFormat(
new[] { ConfigurationManager.AppSettings["ida:ClientId"] },
new IIssuerSecurityTokenProvider[] { new SymmetricKeyIssuerSecurityTokenProvider(issuer, secret) }
)
});
// this is old version (not using clientsecret, aka AD native app), this works but all my code is in the Angular Single Page app, I am trying to move the auth code into the node server to secure all access
app.UseWindowsAzureActiveDirectoryBearerAuthentication(new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
TokenValidationParameters = new TokenValidationParameters
{
ValidAudiences = new[]
{
ConfigurationManager.AppSettings["ida:AudienceImplicit"],
ConfigurationManager.AppSettings["ida:AudienceDaemon"]
}
}
});
Mein Verständnis ist, dass dieser Ansatz für den impliziten OAuth-Fluss ist, den ich gearbeitet habe, aber nun eine ID und ein Geheimnis verwenden möchte, während implizites OAuth kein Geheimnis benötigt. Außerdem hat node-adal keinen Code, der impliziten OAuth-Fluss unterstützt. – click2install
Die Middleware, die Sie zum Validieren von Tokens verwenden, sollte nicht davon abhängen, wie das Token benötigt wurde. – dstrockis
OK, ich habe also die von Ihnen vorgeschlagene Methode ausprobiert, die zuvor auch für den impliziten OAuth-Grant-Flow funktioniert hat. Ich habe das Publikum vom decodierten Token zurückgeholt und es zeigt mir immer noch eine 401. Kann ich die Interna der Middleware trotzdem debuggen, ohne die geklonte Quelle einzubeziehen? – click2install