我已经注册了一个带有Azure AD的angular应用程序进行身份验证。授权后,Azure重定向回我的应用程序,由Azure配置中的"回复Url"指定。
Reply Url = http://myapp.com/#/?
应用程序期望url参数片段(如auth code, token, state等)附加到重定向url后,如果用户auth成功,将检查这些参数片段。
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路由,并且auth参数不会被捕获/解析。回复url中"#"之后的内容似乎都被忽略了。
关于什么原因导致重定向url不使用Azure AD中配置的完整回复url的任何想法?
据我所知,在Azure AD上配置的Reply Url
只是为了验证重定向url的location.origin
。
这个重定向的url可以通过在adalAuthenticationServiceProvider.init
方法中设置redirectUri
选项来配置(当你在制作Angular应用时)。
回到你的问题,我有相同的重定向url格式#id_token=...
没有?
字符。但是对我来说都很好,因为我可以通过访问adalAuthenticationService.userInfo
对象来访问所有必要的值。
点击这里查看更多详细信息。
希望对你有帮助
我所做的是在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像往常一样返回片段中的代码,所有路由都可以正常工作。