我正在尝试将Azure设置为带有我们的应用程序的联合登录的身份提供者。看来应该足够简单了,但是...
代码:
private void ConfigureSAML2()
{
Microsoft.IdentityModel.Logging.IdentityModelEventSource.ShowPII = true;
App.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);
App.UseCookieAuthentication(new CookieAuthenticationOptions());
App.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
Wtrealm = "75d8479b-5530-4e93-a685-fc0d6847c453",
MetadataAddress = "https://login.microsoftonline.com/17ea2b4e-7ce9-4eb4-9d1a-6d7da51f1421/federationmetadata/2007-06/federationmetadata.xml",
Notifications = new WsFederationAuthenticationNotifications
{
AuthenticationFailed = context =>
{
context.HandleResponse();
context.Response.Redirect(ConfigurationService.BaseURL + "#/authentication?failed=true&message=" + context.Exception.Message);
return Task.FromResult(0);
}
}
});
}
不幸的是,它始终通过Exception.Message =“ IDX10501:签名验证失败。无法匹配密钥来触发失败。kid:'Microsoft.IdentityModel.Xml.KeyInfo',令牌:'Microsoft.IdentityModel.Tokens.Saml2.Saml2SecurityToken '。”和Exception.StackTrace =
Microsoft.IdentityModel.Tokens.Saml2.Saml2SecurityTokenHandler.ValidateSignature(String token,TokenValidationParametersvalidationParameters)中的在Microsoft.IdentityModel.Tokens.Saml2.Saml2SecurityTokenHandler.ValidateToken(字符串令牌,TokenValidationParametersvalidationParameters,SecurityToken&validatedToken) 在Microsoft.Owin.Security.WsFederation.WsFederationAuthenticationHandler.d__8.MoveNext()
古怪的是,当我看到Azure向我发送的索赔看起来合法时。我可以看到我的名字,姓氏,电子邮件等完整无缺。我很想粉碎并从响应中获取我需要的东西,但我更希望使中间件正常工作。
我认为我的Wtrealm值看起来很奇怪,但这是Azure知道我在说什么的唯一方式。我很难找到许多带有Azure的WS-Federation的示例。不幸的是,OpenId Connect不是我们的选择(顺便说一句,我们已经可以使用了。)