我在Azure中有一个租户,其中包含许多应用。我使用OpenID Connect进行授权。在login.microsoft.com openid-configuration中,提供了end_session_endpoint
URL。 This文章介绍了如何发送退出请求。这将结束Azure中的会话,但不会在我的客户端(Angular2 SPA)上结束。为此,我使用angular-oauth2-oidc和以下代码:
this.http.get('https://login.microsoftonline.com/TENANT_ID/oauth2/logout",')
.toPromise()
.then(function () {
this.oauthService.logOut();
}
);
登录的GET到.microsoftonline.com将在服务器上结束会话,logOut()
调用将在本地结束会话。当我运行它时,我收到以下错误:
XMLHttpRequest无法加载https://login.microsoftonline.com/TENANT_ID/oauth2/logout。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://localhost:51518'因此不允许访问。
当我检查login.microsoftonline.com GET的响应时,Access-Control-Allow-Origin
不是响应标头之一。我很惊讶它没有*
作为值的标头。无论如何,我该如何解决这个问题?我看到App Services中有一个CORS设置,我将我的localhost(当前本地测试)添加到CORS中,用于租户中的一个应用程序,但它仍然无效。
暂时,我已经在我的应用API上添加了一个API端点,该端点用C#调用login.microsoftonline.com网址,但是必须这样做很烦人。我想通过javascript完成所有操作。
答案 0 :(得分:0)
您需要将浏览器重定向到网址。你无法通过AJAX调用它。
您还必须将用户重定向到end_session_endpoint以进行注销。
Azure AD不允许在登录端点上进行跨域调用,并且您无法对其进行更改。
您可以将用户重定向到:
https://login.microsoftonline.com/ccb87602-82bf-4f35-b7d2-aaaaaaaaaaaa/oauth2/logout?post_logout_redirect_uri=https%3a%2f%2fsitename.azurewebsites.net%2fHome%2fSignedOut
post_logout_redirect_uri
参数允许您指定用户浏览后应在注销后重定向的位置。这样用户就不会失去上下文。在重定向之前,请确保在应用程序的一侧保存用户的工作,这样您就不会生气。