【发布时间】:2018-04-20 06:39:16
【问题描述】:
- 我有一个通过 Azure AD 进行身份验证的 Intranet - 位于 https://intranet.example.com/(详细而言,它的 Sharepoint Online);
- 在某些页面中,我们需要由rest api 生成的动态内容——位于https://api.example.com/(具体来说,.NET WebAPI,使用 OpenId 的 Owin 中间件);
- api.example 也通过 AAD 进行身份验证;
- api.example 和 intranet.example 都具有通过管理员同意授予的 Windows Azure AD 权限;
- api.example 为https://intranet.example.com/ 启用了 X-Frame-Options、Access-Control-Allow-Credentials 和 Access-Control-Allow-Origin;
我需要什么:
某些页面具有由从 api.example 请求数据的 JavaScript 逻辑生成的动态内容;
用户将在 intranet.example 中进行身份验证,并且 api.example 必须具有单点登录行为。
必须避免任何类型的提示或授权请求,因为所有这些都必须对最终用户透明;
我尝试了什么:
我试图简单地在 Intranet.example 中放置一个指向 app.example 的 IFrame,它可以在 Chrome/Firefox 上运行。但是,IE11 不允许这样做,因为我的应用重定向到 https://login.microsoftonline.com/,它的响应是 X-FRAME-OPTIONS 设置为 DENY。
示例:
- 用户登录 Google 帐户,访问 https://mail.google.com/ 并在没有提示或授权请求或其他任何内容的情况下启动并运行环聊消息,完全透明。
- 用户登录 Microsoft 个人帐户,访问 https://onedrive.live.com/ 并启动和运行 Skype 消息,无需提示或授权请求或其他任何内容,完全透明。
注意1:它必须在我们的域之外工作。因此,设置 Intranet/Trusted Site Zone 不是一个选项。
注2:与Sharepoint越解耦越好。
注3:我试过这个方法PnP Webcast - Calling external APIs securely from SharePoint Framework。
【问题讨论】:
-
您需要获取相应的token才能调用受Azure AD保护的Web API。 [此代码示例[(github.com/Azure-Samples/…) 有用吗?如果我误解了,请随时告诉我。
-
@FeiXue 感谢您的回复。我认为它不会尽快解决我的问题,因为我的 Intranet.example 将不得不重定向到 Microsoft 登录页面以获取访问令牌。它将需要打开一个弹出窗口,这意味着用户必须单击某个按钮或将 intranet.example 放入 Intranet 区域):
-
如果你是通过 OpenID 连接实现 SSO,当用户已经登录时它不会提示登录页面。您需要在 Web 应用程序中做的唯一事情是使用
AuthorizationCodeReceived获取相应资源的令牌,如代码示例所示。 -
@GuilhermeMatheusCosta - 这个问题只影响 IE11 吗?其他浏览器呢?
标签: iframe single-sign-on internet-explorer-11 azure-active-directory openid