首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静音刷新在角oauth oidc中不起作用。

静音刷新在角oauth oidc中不起作用。
EN

Stack Overflow用户
提问于 2021-07-06 17:00:18
回答 1查看 2.2K关注 0票数 0

我试图在我的角度SPA中静默地刷新访问令牌。针对ADFS的身份验证已经完成。它工作得很好,配置如下:

代码语言:javascript
复制
oauthService.configure({
      redirectUri:
        window.location.origin + '/login',
      requireHttps: true,
      scope: 'openid profile email',
      responseType: 'id_token token',
      oidc: true,
      clientId: environment.adfsClientId,
      loginUrl: environment.adfsUrl + '/oauth2/authorize',
      issuer: environment.adfsUrl,
      logoutUrl:
        environment.adfsUrl +
        '/ls/?wa=wsignoutcleanup1.0&wreply=' +
        location.protocol +
        '//' +
        location.hostname + '/login',
      postLogoutRedirectUri:
        window.location.origin + '/login',
    });

    this.oauthService.tokenValidationHandler = new JwksValidationHandler();
    this.oauthService.setStorage(localStorage);
    this.oauthService.timeoutFactor = 0.03; // for faster testing
    this.oauthService.silentRefreshRedirectUri = window.location.origin + '/search';
    this.oauthService.setupAutomaticSilentRefresh();

为了刷新令牌,iframe将被添加到当前页面。一切看起来都很好。我将以下代码添加到index.html文件中。

代码语言:javascript
复制
  <script>
    parent.postMessage(location.hash, location.origin);
  </script>

此事件是在silentRefreshPostMessageEventListener.中的角OAuth2-oidc.js中捕获的。但问题是我得到的信息是,

MSIS9621:在没有用户输入的情况下无法处理OAuth授权请求。

在iframe中生成的src标记值如下所示,

https://[adfs domain]/adfs/oauth2/authorize/?response_type=id_token%20token&client_id=af0e4d79-ae9d-4fda-86b3-265d1e86a61e&state=UmtkeUJfNDBCUU1VWkZyeWcubFlldlo3ZHFFbFRuVDI3TnNZUU5FVXJxTXpX&redirect_uri=http%3A%2F%2Flocalhost%3A4200%2Fsearch&scope=openid%20profile%20email&nonce=UmtkeUJfNDBCUU1VWkZyeWcubFlldlo3ZHFFbFRuVDI3TnNZUU5FVXJxTXpX&prompt=none

如果我在一个新的选项卡中打开这个URL,我将在Uri中获得一个新的访问令牌。

有人能告诉我我在这里做错了什么吗?

更新

谢谢你加里·阿彻的回答。

我通过在PowerShell中执行这段代码对ADFS进行了更改,

Set-AdfsResponseHeaders“X帧-选项”

什么都没变。然后,我将下面的命令设置为修复该问题。

Set-AdfsResponseHeaders“内容-安全性-策略”“-SetHeaderValue”框架-祖先<源>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-06 17:54:26

看起来ADFS阻塞了iframe请求,并发送了一个X帧Oprions=DENY报头。根据这个职位的说法,它在2019年的ADFS中是可解决的。

一个可能有效的选项是使用刷新令牌,但在2021年生产SPA时不建议使用刷新令牌,因为刷新令牌不应该存储在浏览器中的任何地方。

值得记住的是,在2021年,基于沉默的iframe更新也不是真正的建议,因为攻击者可能会利用自己隐藏的iframe并获取令牌。

2021年首选的选项是前端后端方法,其中API处理SPA的令牌更新。

AZURE API驱动方法

进行操作的方法是插入一个API并将其指向Azure AD端点。这将使令牌远离浏览器,在浏览器中只使用SameSite cookie。

以下Curity解决方案演示了这种方法,API可以指向任何授权服务器。不过,这需要一些消化。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68274638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档