我们的客户有一个Azure AD,其中包含位于全球多个位置的公司中的所有用户。他希望他的用户能够使用Azure AD上的Microsoft帐户登录我们的SP应用程序。
显然,由于Azure AD使用SAML 2.0,而SharePoint使用Ws-Fed(类似于SAML 1.1),我们需要将这些声明从2.0转换为Ws-Fed(或SAML 1.1)。
以前这是使用Azure的Azure Control Services完成的,该服务将在年底(2018年)弃用,因此开发使用它的解决方案毫无意义。
因此,我们发现了一些指南here和here,详细说明了如何在Azure AD和ADFS之间创建声明提供程序信任,并在AD FS之间建立依赖方信任和SharePoint。
理论上,这可以通过以下方式实现:
我们似乎在转换步骤中遇到问题。 我们使用Fiddler调试了该进程,以查看进出AD FS服务器的请求。 Azure AD声明已成功发送到AD FS,但是当AD FS发出新声明(假设在Ws-Fed或SAML 1.1中)时会遇到错误。
以下是来自AD FS的堆栈跟踪:
Microsoft.IdentityServer.Web.RequestFailedException: MSIS7012: An error occurred while processing the request. Contact your administrator for details. ---> System.ServiceModel.FaultException: MSIS3127: The specified request failed.
at Microsoft.IdentityServer.Protocols.WSTrust.WSTrustClientManager.Issue(Message request, WCFResponseData responseData)
at Microsoft.IdentityServer.Protocols.WSTrust.WSTrustClient.Issue(RequestSecurityToken rst, WCFResponseData responseData)
at Microsoft.IdentityServer.Web.FederationPassiveAuthentication.SubmitRequest(MSISRequestSecurityToken request)
--- End of inner exception stack trace ---
at Microsoft.IdentityServer.Web.FederationPassiveAuthentication.SubmitRequest(MSISRequestSecurityToken request)
at Microsoft.IdentityServer.Web.FederationPassiveAuthentication.RequestBearerToken(MSISSignInRequestMessage signInRequest, SecurityTokenElement onBehalfOf, SecurityToken primaryAuthToken, String desiredTokenType, UInt32 lifetime, Uri& replyTo)
at Microsoft.IdentityServer.Web.FederationPassiveAuthentication.RequestBearerToken(MSISSignInRequestMessage signInRequest, SecurityTokenElement onBehalfOf, SecurityToken primaryAuthToken, String desiredTokenType, MSISSession& session)
at Microsoft.IdentityServer.Web.FederationPassiveAuthentication.BuildSignInResponseCoreWithSerializedToken(String signOnToken, WSFederationMessage incomingMessage)
at Microsoft.IdentityServer.Web.FederationPassiveAuthentication.BuildSignInResponseForProtocolResponse(FederationPassiveContext federationPassiveContext)
at Microsoft.IdentityServer.Web.FederationPassiveAuthentication.BuildSignInResponse(FederationPassiveContext federationPassiveContext, SecurityToken securityToken)
System.ServiceModel.FaultException: MSIS3127: The specified request failed.
at Microsoft.IdentityServer.Protocols.WSTrust.WSTrustClientManager.Issue(Message request, WCFResponseData responseData)
at Microsoft.IdentityServer.Protocols.WSTrust.WSTrustClient.Issue(RequestSecurityToken rst, WCFResponseData responseData)
at Microsoft.IdentityServer.Web.FederationPassiveAuthentication.SubmitRequest(MSISRequestSecurityToken request)
我们还进行了内部测试,我们使用本地AD登录到SharePoint网站,以确保AD FS和SharePoint之间的设置正确无误。这按预期工作,SharePoint收到了步骤4中配置的声明。
对于从SAML 2.0到Ws-Fed(或SAML 1.1)的“转换”过程的任何帮助将不胜感激。
帮助我Obi-Wan Kenobi,你是我唯一的希望!
答案 0 :(得分:1)
将AD FS'PreventTokenReplays param设置为false
在我们的案例中,这就是我们坚持了几天的原因。在我们阅读的任何地方都没有提到这一点,我们只是在转到AD FS服务器的事件查看器并浏览日志后才发现它。
打开PowerShell,然后使用以下命令添加AD FS管理单元:
Add-PSSnapin Microsoft.Adfs.PowerShell
然后,使用以下命令获取AD FS属性:
Get-adfsproperties
检查PreventTokenReplays参数的值。如果它被设置为假,你应该是好的。如果设置为true,则使用以下命令将其翻转为false:
Set-adfsproperties -PreventTokenReplays $false
现在,您需要重新启动AD FS服务。只需转到services.msc,找到AD FS 2.0 Windows服务,右键单击它,然后点击重启。
答案 1 :(得分:0)
配置概览 创建新的 Azure AD 租户和命名空间。 添加 WS-Federation 身份提供者。 添加 SharePoint 作为信赖方应用程序。 为基于声明的身份验证创建规则组。 配置 X.509 证书。 创建声明映射。 为新的身份提供程序配置 SharePoint。 设置权限。 验证新的提供者
您可以关注此博客以了解分步过程 https://www.sharepointcollabs.com/2017/03/using-microsoft-azure-active-directory.html