当前位置: 首页 > 知识库问答 >
问题:

从ADFS 3.0获取索赔并在SAML 2.0中显示给Shibboleth 2.6服务提供商(SP)

仉联
2023-03-14

我试图配置Windows Server 2012 r2 ADFS 3.0以将NameID发送到Shibboleth 2.6 SAML 2.0 SP,但我一直收到这些错误:

2016-11-15 10:07:07 WARN Shibboleth.AttributeResolver.Query [1]: can't attempt attribute query, either no NameID or no metadata to use
2016-11-15 10:07:07 INFO Shibboleth.SessionCache [1]: new session created: ID (_7e425978e43bc32c86393f518b26eb3e) IdP (https://c-adfs01.contoso.com/FederationMetadata/2007-06/FederationMetadata.xml) Protocol(urn:oasis:names:tc:SAML:2.0:protocol) Address (192.168.50.131)

我知道这与从ADFS IDP传递NameID属性并在Shibboleth SAML 2.0 SP中显示nameID有关。

我还了解到,您需要在ADFS IDP中设置一个规则来传递电子邮件地址,并将电子邮件地址转换为NameID。我已经做到了,并且有以下规则:

c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"]
 => issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = c.Value, ValueType = c.ValueType, Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"] = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress");

然而,我观察到,该配置似乎只与SAML 1.0兼容,而与2.0不兼容(可能)。

因此,我继续添加name属性。我尝试了瞬态、持久和电子邮件地址,并尝试了SAML 1.0和SAML 2.0配置。

<Attribute name="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" id="NameID"/>
<Attribute name="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" id="NameID"/>
<Attribute name="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" id="NameID"/>

问题:

那么,配置ADFS IDP将名称ID发送到Shibboleth SP并在转到“我的应用程序会话”页面时显示会话属性的正确方法是什么?

具体来说,我应该期望的声明规则的正确输出是什么?Shibbolethattribute-map.xml的XML配置应该是什么样子?

https://c-app01.contoso.com/Shibboleth.sso/Session

共有1个答案

司空高义
2023-03-14

解决方案:

解决方案是在依赖方的“发布转换规则”选项卡中创建两个规则。以下是需要设置的规则:

  • 添加将LDAP属性作为声明发送的规则

此外,请确保“允许访问所有用户”位于“颁发授权规则”选项卡内。

说明:

添加将LDAP属性作为声明发送的规则:

  • 索赔规则名称:电子邮件
  • 属性存储:Active Directory
  • LDAP:电子邮件地址到电子邮件地址的映射

这将映射电子邮件地址。

添加规则以转换传入声明:

  • 声明规则名称:EmailToNameID
  • 传入索赔类型:电子邮件地址
  • 传出声明类型:名称ID
  • 传出姓名ID格式:电子邮件
  • 确保选择了“传递索赔值”。

上面的“转换传入索赔”设置将为您提供以下索赔规则:

c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"]
 => issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = c.Value, ValueType = c.ValueType, Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"] = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress");

之后,您可以配置属性映射。xml类似:

<Attribute name="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" id="Email"/> 

我的错误:

我发现我的索赔规则中的每个设置都是正确的,除了电子邮件和电子邮件名称的规则应该在依赖方的“发布转换规则”选项卡下。

 类似资料:
  • 我必须在具有OpenSAML2.5.1(旧版本的cas)的代码库上实现SAML2.0,不幸的是,我无法使用spring saml安全扩展(它使用了新版本的opensaml)。我已经研究了spring扩展如何处理授权请求/响应,并在一定程度上对其进行了反向工程。我能够从sp呼叫idp(sso圈)并尝试登录,但在提交时出现500个错误:原因:无法进行单点登录或联合。 是否有任何示例java opens

  • 我希望用Python实现一个基于SAML 2.0的服务提供者。 我的Web应用程序目前都是Flask应用程序。我计划制作一个Flask蓝图/装饰器,允许我将单点登录功能放入预先存在的应用程序中。 我已经深入研究了python saml,但不幸的是,存在一些不值得解决的依赖性问题,因为我有太多预先存在的服务器/应用程序,这些服务器/应用程序的环境将不兼容。 PySAML2看起来可以工作,但是几乎没有

  • 我对Laravel很陌生,并使用这个答案为我的助手函数实现了服务提供者。 它建议: 在新生成的HelperServiceP的寄存器函数中rovider.php添加以下代码 然而,Laravel docs指出,register方法只能用于将内容绑定到容器中: 如前所述,在register方法中,您应该只将内容绑定到服务容器中。绝不应尝试在register方法中注册任何事件侦听器、路由或任何其他功能。

  • 我们在 IIS 实例上安装了 Shibboleth SP3,它具有很好的 SSO 身份验证。 然而,我们希望向Azure(我们的IdP)传递一个login_hint参数,以减轻拥有多个帐户的人的负担。这样,如果他们还没有连接,登录就已经设置好了,他们只需要用他们的密码填写表单。 是否有办法将查询字符串参数从初始超文本传输协议请求传递给Idp? 例如,用户转到 https://sp.server.c

  • 问题内容: 对于不正确的Ajax操作,我将HTTP标头代码设置为403并发送以下响应: 但是,在处理错误时我无法访问此数据…是否可以从jqXHR访问“消息”数据? 像jqXHR.message之类的东西? 非常感谢您的帮助… EDIt: 返回: 但是xhr.responseText.message不返回任何内容… 编辑:此代码有效: 问题答案: 您应该进入jQuery“错误”回调… http://

  • 但是宽度和高度较低的图像成功地加载到图像视图中! 有人能告诉我代码有什么问题吗?我做错了什么?我只想从库中导入相机图像,并在图像视图中显示它们!