场景
有一个用户存储库,即本地AD。 ADFS为SharePoint 2013和Power BI提供身份验证。
自定义Web应用程序需要从AD验证用户。 Web应用程序后端还需要访问SharePoint REST API。
目标是使用单个登录来实现上述目标。如果在这三个应用程序中的任何一个中登录,则用户不必为其他两个应用程序输入凭据。此外,自定义Web应用程序显示来自SharePoint(iFrame和REST API)和Power BI(iFrame)的内容。
我们已经尝试了以下两个解决方案,但在任一情况下都遇到了问题。
解决方案1
- 用户在Web应用程序中输入凭据。
- Web应用程序后端使用这些凭据从ADFS获取SAML令牌。
- Web应用程序后端使用SAML令牌通过基于表单的身份验证对用户进行SharePoint身份验证,并检索FedAuth cookie。
- Web应用程序后端使用FedAuth cookie向SharePoint发出REST API请求
- Web应用程序前端使用SAML令牌通过基于表单的身份验证对用户进行SharePoint身份验证。这允许在iFrames中包含SharePoint内容。
有什么问题:导航到Power BI或在iFrame中包含它将重定向用户到ADFS登录页面。这是因为用户尚未在浏览器中通过ADFS进行身份验证。
解决方案2
- 自定义Web应用程序也使用ADFS SSO。
- 导航到这三个应用程序中的任何一个都会将用户重定向到ADFS登录页面
- 用户输入其凭据并返回到具有SAML令牌的应用程序。
- 导航到其他两个应用程序中的任何一个都将重定向用户到ADFS,而无需再次要求用户登录,ADFS将使用另一个SAML令牌将用户重定向回应用程序。
- 这允许在Web应用程序中包含SharePoint和Power BI内容的iFrames。
有什么问题:Web应用程序无法使用从ADFS接收的SAML令牌对SharePoint进行REST API请求。我们尝试使用该SAML令牌代表已登录用户向ADFS请求另一个SAML令牌,但也没有成功。此外,本地的SharePoint 2013可能不接受代表请求。
问题
是否有一种方法可以同时实现这三个应用程序的SSO,并且还可以从Web应用程序访问SharePoint的REST API?用户只需登录一次,最好只需登录Web应用程序。