如何在当前 Web 应用程序的 iframe 中使用有效令牌?

Posted

技术标签:

【中文标题】如何在当前 Web 应用程序的 iframe 中使用有效令牌?【英文标题】:How to use valid token in iframe from current web application? 【发布时间】:2020-06-24 11:31:23 【问题描述】:

我有两个 Web 应用程序(应用程序 A 和应用程序 B),并希望将其中一个 (A) 用作另一个 (B) 中的 iframe。我在当前的 Web 应用程序 (B) 中有一个令牌,它在 iframe (A) 中也有效。 iframe Web 应用程序 (A) 使用 OIDC js 身份验证和 angularjs,现在我如何将令牌从 B 发送到 A 并使用它?

在我的 A 应用程序中,我有这个:

var config = 
    authority: '...my auth server ...',
    client_id: '...'
    ...


mgr = new OidcTokenManager(config);

if (window.location.hash && window.location.hash.indexOf('id_token') > -1) 
    mgr.processTokenCallbackAsync().then(function () 
        //checkSessionState();
    , function (error) 
    );

这很好用,但是当我使用 A 作为 iframe 时,mgr 无法正确启动,并且某些属性如 access_token 未定义!

【问题讨论】:

如果 B 有令牌,您可以通过查询参数(将 iframe URL 设置为也包含令牌)或 postMessage 将其发送到 iframe。 谢谢@MoshFeu。是的,我试过了,但我有提到的错误! mgr 未启动。 【参考方案1】:

使用 javascript 函数从 A => B => A 发布数据

来自 Parrent 应用程序的 JavaScript 代码

 document
      .querySelector(`iframe`)
      .contentWindow.postMessage( token: '112121' , "*");

接收器或 iframe 应用程序代码

window.addEventListener('message', receiveToken,*);

const receiveToken = message => 
    if (message.data && message.data.token)
        console.log(message.data.token)
   

【讨论】:

以上是关于如何在当前 Web 应用程序的 iframe 中使用有效令牌?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift iOS 中使 web 视图不可点击

如何在使用 Angular 7 和 Spring Boot 构建的 Web 应用程序中使浏览器缓存无效

如何在设备屏幕中使用横向方向的iframe内容

如何获取 iframe 的当前位置?

如何在控制器方法中使 JWT 令牌授权可选

如何在Asp .Net Web API中的请求的整个生命周期中使类对象可用?