问题描述
我们在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>
解决方法
答案是双重的:
ServiceProvider.xml文件需要将nameid格式指定为电子邮件地址
<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat>
并且来自ADFS的声明映射必须为
电子邮件地址->名称ID