我应使用哪些声明将ADFS用户映射到GCIP

问题描述

我们在Firebase平台上有一个SaaS产品,我们的一位客户要求我们向其用户提供SSO体验。他们有一个旧的ADFS作为IdP。

我虽然首先使用Passport-Saml,但随后发现firebase身份验证可以将Google Cloud Identity Platform用于自定义SAML IdP。

效果很好,我们让一个用户首次登录。但是,在firebase中创建的用户非常空。

这是来自auth创建挂钩的用户

 {
  customClaims: {
  }
  disabled: false   
  displayName: null   
  email: null   
  emailVerified: false   
  Metadata: {
   creationTime: "2020-09-21T22:43:36Z"    
   lastSignInTime: "2020-09-21T22:43:36Z"    
  }
  passwordHash: null   
  passwordSalt: null   
  phoneNumber: null   
  photoURL: null   
  providerData: [
   0: {
    providerId: "saml.xxxx"     
    uid: "xxxx"     
   }
  ]
  tokensValidAfterTime: null   
  uid: "xxxx"   
 }

在ADFS方面,我们的客户已将声明配置为将LDAP映射为 电子邮件地址->电子邮件地址 SAM帐户名称->名称ID

如果有人对将SAML声明映射到firebase用户属性有任何想法,我将非常感谢,文档中没有运气。

修改 我使用saml tools

创建了ServiceProvider.xml
<?xml version="1.0"?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:Metadata"
                     validUntil="2020-09-25T02:53:54Z"
                     cacheDuration="PT604800S"
                     entityID="xxxx">
    <md:SPSSODescriptor AuthnRequestsSigned="false" WantAssertionsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
        <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat>
        <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                                     Location="https://xxx.firebaseapp.com/__/auth/handler"
                                     index="1" />
        
    </md:SPSSODescriptor>
</md:EntityDescriptor>

使用saml test(这是一个很棒的沙箱)进行了更多测试

解决方法

答案是双重的:
ServiceProvider.xml文件需要将nameid格式指定为电子邮件地址

 <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat>

并且来自ADFS的声明映射必须为
电子邮件地址->名称ID

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...