Azure AD身份验证重定向未使用配置的回复URL

6

我已经在Azure AD中注册了一个Angular应用程序以进行身份验证。身份验证后,Azure将根据Azure配置中的“回复URL”将用户重定向回我的应用程序。

Reply Url = http://myapp.com/#/?

该应用程序期望将URL参数片段(例如授权代码、令牌、状态等)附加到重定向URL上,如果用户认证成功,则会对这些片段进行检查。
Redirect Url = http://myapp.com/#/?code=<some code>&id_token=<id token>&...

这在之前是有效的,但截至昨天,重定向URL现在看起来像这样。
Redirect Url = http://myapp.com/#code=<some code>&id_token=<id token>&...

在Azure管理门户中没有对应用程序配置进行任何更改。

这种新格式破坏了应用程序中的angular路由,并且未能捕获/解析认证参数。似乎在回复url中“#”后面的所有内容都被忽略了。

你有什么想法,是什么原因导致重定向url没有使用在Azure AD中配置的完整回复url?


我们遇到了同样的问题。你有想到克服这个问题的方法吗? - qmo
在Azure上添加了反馈 http://feedback.azure.com/forums/169401-azure-active-directory/suggestions/6535001-openidconnect-bug-in-azure-ad-sso-reply-url - qmo
我有同样的问题,只是我的redirect_uri中甚至没有#,只有一些普通的查询字符串参数。昨天还能用,今天就坏了。我的解决方法是在.htaccess中设置一个重定向,并将其用作redirect_uri,即/azureredirect.html重定向到/index.php?param1=value1&param2=value2%{QUERY_STRING}。 - Karman Kertesz
我们的解决方案是在我们的 app.js 中处理返回 URL 解析,因为路由是在那里处理的。我们不想依赖 Azure 返回的 URL,并且只是假定它会在重定向时首先命中我们的 Angular 路由器,然后只需进行一些路由逻辑来检查是否来自 Azure 或任何其他地方。我认为这比在 Azure 中声明路由更具有弹性。 - photohunts
2个回答

0
据我所知,Azure AD 上配置的“回复 URL”仅用于验证“重定向 URL”的location.origin
可以通过在adalAuthenticationServiceProvider.init 方法中设置 redirectUri选项来配置此重定向 URL(因为您正在创建Angular应用程序)。
回到您的问题,我的重定向 URL 格式也是#id_token=...,没有?字符,但对我来说一切都很好,因为我可以通过访问adalAuthenticationService.userInfo 对象来访问所有必要的值。
如果需要更详细的信息,请查看这里
希望这能对您有所帮助。

0
我所做的是在Angular端使用HTML5模式。
您可以看到我如何配置ADAL和路由:
$locationProvider.html5Mode(true).hashPrefix("!");

var endpoints = {
    "/api": "https://app-id-uri"
};
adalAuthenticationServiceProvider.init(
{
    clientId: "12345678-1234-1234-1234-123456789012",
    endpoints: endpoints
},
$httpProvider
);

在服务器端,无论访问哪个路由,返回主页都非常重要,因为路由是在客户端完成的。现在,AAD像往常一样在片段中返回代码,并且所有路由也能正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接