当前位置: 首页 > 知识库问答 >
问题:

CORS在Angular应用程序中出现Azure AD OpenID Connect注销问题

聂琨
2023-03-14

我在Azure中有一个托管许多应用程序的租户。我正在使用OpenID Connect进行授权。在login.microsoft.comopenid配置中,提供了一个end_session_endpointURL。本文介绍如何发送注销请求。这将在Azure中结束会话,但不会在我的客户端(Angular2 SPA)上结束会话。要做到这一点,我使用的角-oauth2-oidc和以下代码:

this.http.get('https://login.microsoftonline.com/TENANT_ID/oauth2/logout",')
    .toPromise()
    .then(function () { 
        this.oauthService.logOut();
    }
);

用户可以登录。微软在线。com将结束服务器上的会话,logOut()调用将在本地结束会话。当我运行此命令时,会出现以下错误:

无法加载XMLHttpRequesthttps://login.microsoftonline.com/TENANT_ID/oauth2/logout.html" target="_blank">请求的资源上不存在“Access Control Allow Origin”标头。起源'http://localhost:51518因此不允许访问。

当我检查登录的响应时。微软在线。com GET,Access Control Allow Origin不是响应头之一。我很惊讶它没有以*作为值的标题。无论如何,我该如何解决这个问题?我看到App Services中有一个CORS设置,我将我的localhost(目前正在本地测试)添加到租户中某个应用的CORS中,但它仍然不起作用。

暂时,我在我的应用程序API上添加了一个APIendpoint,可以用C#调用登录名。微软在线。com网址,但这样做很烦人。我想通过javascript来完成这一切。

共有1个答案

姬昀
2023-03-14

您需要将浏览器重定向到URL。你不能通过AJAX来实现它。

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

Azure AD不允许在登录endpoint上进行跨域调用,您无法更改这一点。

您可以将用户重定向到:

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参数允许您指定用户的浏览器在注销后应重定向到的位置。这样用户就不会失去上下文。在重定向之前,确保将用户的工作保存在应用程序端,以免激怒用户。

 类似资料:
  • 它给出: 下面是我使用的代码: 方法verifyUserExistance是; 我就是这样处理注销的;

  • 我已经设置了一个使用OKTA作为IDP的应用程序。该应用程序基于SAML。这部分工作正常。 但我无法注销。为此,我们有1。已启用单一注销2。设置单一注销URL(我从标题Identity Provider Single Logout URL下的IDP元数据中收到此URL)3。Sp问题(我从标题Identity Provider Issuer下的IDP元数据中收到此消息)4。签名证书(这是IDP的证书

  • 在我的Spring会话中,我使用了 redis 服务器。现在我正在使用 Angular 7。 这里代码1 2 3 4 > 点击注销按钮后,我的页面将重新加载,但注意happen.it将与上一页相同。 如果我把{headers:headers}放在返回的loginservice中。logout(),则会出现错误 (http.js:167),位于HttpHeaders.push../node_modu

  • 我试图在我的Ionic Angular应用程序中执行以下函数,cloudFunctionUrl是我在firebase项目中的一个云函数: 为了解决CORS问题,我安装了允许CORS:Access-Control-Allow-Origin chrome插件。以下是白名单域的列表: null 我遇到了两个问题: null 有人能告诉我怎么解决这件事吗? 我也尝试将下面的头添加到请求中,但错误仍在出现:

  • 正在尝试创建存在于我的Vue应用程序中的导航栏。来自react,所以我正在尝试将导航组件导入main。并在应用程序中的路由器插座上方使用。vue。应用程序是使用带有typescript和Router的vue cli生成的。 我尝试用、、编写导航组件。 我尝试在应用程序中添加脚本标记。vue,我将在其中注册导航组件。 我已经在main中导入并注册了导航组件。ts。 Navigation.ts: 航行