我有一个ASP.Net MVC应用程序,我也使用Azure Active Directory身份验证(owin身份验证)。
我的网站网址是' http://example.com'我的租户已经配置了重定向网址到' http://www.example.com'。
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = Authority,
PostLogoutRedirectUri = "http://www.example.com",
RedirectUri = "http://www.example.com",
Notifications = new OpenIdConnectAuthenticationNotifications()
{
AuthorizationCodeReceived = (context) =>
{
var code = context.Code;
return Task.FromResult(0);
}
}
});
当我尝试使用此配置时,我会在“AuthorizationCodeReceived”'事件,但此事件被多次调用,直到AAD错误抛出。调试我的应用程序时,除了AAD错误页面之外,我没有收到任何错误。 我不明白这里有什么问题,相同的配置正在使用WSFederation身份认证机制。
我怎样才能实现这一目标?因为我被迫发布身份验证会将其重定向到www.example.com'他们来的也不重要。
注意:我曾尝试使用重定向网址' example.com',但它确实有效。但是,我很想知道上面的设置发生了什么?
解决方案:根据用户输入的网址使用动态网址
RedirectToIdentityProvider = (context) =>
{
string appBaseUrl = context.Request.Scheme + "://" + context.Request.Host + context.Request.PathBase;
context.ProtocolMessage.RedirectUri = appBaseUrl;
context.ProtocolMessage.PostLogoutRedirectUri = appBaseUrl;
return Task.FromResult(0);
},
答案 0 :(得分:0)
当我们将Azure Active Directory与OAuth 2.0或OpenId connect protocol集成时,我们可以将 redirect_uri 参数发送到Azure Active Directory。 Azure Active Directory将使用您在门户上注册的值来验证它。 授权端点的此参数为 recomend ,这意味着当应用程序仅具有唯一 redirect_uri 时,它也可以不使用此参数。
只有当我们发送此参数时值与门户网站上的值匹配时,Azure Active Directory才会向 redirect_uri 发送正确的响应,否则它将发送错误消息{{1 }}。您可以使用 Fiddler 捕获请求和响应,以获取Azure Active Directory返回的详细错误消息。
在这种情况下,您的应用程序具有不同的域。我们需要在门户网站上注册所有这些内容,并按照您的提法动态指定当前应用程序使用的域。