使用Azure AD对内部部署的Sharepoint 2013进行身份验证

问题描述 投票:2回答:1

我们的客户有一个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年)弃用,因此开发使用它的解决方案毫无意义。

因此,我们发现了许多指南herehere,详细说明了如何在Azure AD和ADFS之间创建声明提供程序信任,并在AD FS和SharePoint之间设置依赖方信任。

理论上,这可以通过以下方式工作:

  1. 用户登录Azure AD上的Microsoft帐户,并将带有声明的SAML 2.0令牌从Azure AD发送到AD FS
  2. 所有索赔都传递给AD FS,因为我们以这种方式配置了规则(如here指示)
  3. AD FS将这些从SAML 2.0转换为Ws-Fed(或SAML 1.1)
  4. AD FS将必要的声明映射到UPN(按照指示的here)并将结果发送到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,你是我唯一的希望!

azure sharepoint-2013 azure-active-directory saml-2.0 adfs
1个回答
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服务,右键单击它,然后点击重启。

© www.soinside.com 2019 - 2024. All rights reserved.