Angular应用程序中的Azure AD OpenID Connect注销的CORS问题

时间:2017-05-31 13:41:38

标签: javascript angularjs azure openid azure-active-directory

我在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完成所有操作。

1 个答案:

答案 0 :(得分:0)

您需要将浏览器重定向到网址。你无法通过AJAX调用它。

  

您还必须将用户重定向到end_session_endpoint以进行注销。

Azure AD不允许在登录端点上进行跨域调用,并且您无法对其进行更改。

您可以将用户重定向到:

https://login.microsoftonline.com/ccb87602-82bf-4f35-b7d2-aa‌​aaaaaaaaaa/oauth2/lo‌​gout?post_logout_red‌​irect_uri=https%3a%2‌​f%2fsitename.azurewe‌​bsites.net%2fHome%2f‌​SignedOut

post_logout_redirect_uri参数允许您指定用户浏览后应在注销后重定向的位置。这样用户就不会失去上下文。在重定向之前,请确保在应用程序的一侧保存用户的工作,这样您就不会生气。