gpt4 book ai didi

azure - 使用 Azure AD 对本地 Sharepoint 2013 进行身份验证

转载 作者:行者123 更新时间:2023-12-02 07:09:20 26 4
gpt4 key购买 nike

我们的客户有一个 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 控制服务完成的,该服务将于今年年底(2018 年)弃用,因此开发使用它的解决方案是没有意义的。

因此,我们找到了一些指南 herehere其中详细介绍了如何在 Azure AD 和 ADFS 之间创建声明提供者信任,以及如何在 AD FS 和 SharePoint 之间设置依赖方信任。

理论上,它的工作原理如下:

  1. 用户登录其位于 Azure AD 上的 Microsoft 帐户,带有声明的 SAML 2.0 token 会从 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)的“转换”过程的任何帮助,我们将不胜感激。

Help me Obi-Wan Kenobi, you're my only hope!

最佳答案

将 AD FS 的 PreventTokenReplays 参数设置为 false

就我们而言,这就是让我们陷入困境几天的原因。我们读到的任何地方都没有提到这一点,我们只是在进入 AD FS 服务器的事件查看器并查看日志后才发现这一点。

打开 PowerShell,并使用以下命令添加 AD FS 管理单元:

Add-PSSnapin Microsoft.Adfs.PowerShell

然后,使用以下命令获取您的 AD FS 属性:

获取 adfsproperties

检查 PreventTokenReplays 参数的值。如果它设置为 false,你应该没问题。如果它设置为 true,则使用以下命令将其翻转为 false:

Set-adfsproperties -PreventTokenReplays $false

现在,您需要重新启动 AD FS 服务。只需转到 services.msc,找到 AD FS 2.0 Windows 服务,右键单击它,然后单击重新启动。

关于azure - 使用 Azure AD 对本地 Sharepoint 2013 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48205834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com