gpt4 book ai didi

google-cloud-platform - Google Cloud Identity Platform (CICP) SAML 工作流程失败

转载 作者:行者123 更新时间:2023-12-04 15:34:58 30 4
gpt4 key购买 nike

背景

使用具有以下配置的 Firebase Auth 和 SAML Auth Provider:

const config = {
apiKey: "AIzaSy...",
authDomain: "example-app.firebaseapp.com",
};

firebase.initializeApp(config);

const provider = new firebase.auth.SAMLAuthProvider('saml.example-idp');

function saml() {
firebase.auth().signInWithRedirect(provider)
.then((result) => {
console.log(result);
})
.catch((error) => {
console.log(error);
});
}

SAML 上游的 CICP 配置具有服务提供商:我们的实体 ID 和配置为我们的 CICP https://example-app.firebaseapp.com/__/auth/handler 的 ACS。

我期望发生什么

能够在 signInWithRedirect() 的 Promise 的 then 中设置断点并查看经过身份验证的用户。

实际发生了什么

流被重定向到 IdP 并处理身份验证。

IdP 发出带有自动提交加载和 multipart/form-data 表单的重定向发布页面:

  • 内容配置:表单数据; name=SAMLResponse - 包含 base64编码签名 SAMLResponse
  • 内容配置:表单数据;name=RelayState - 包含来自 SAML 流的中继状态
  • 内容配置:表单数据; name="ssourl"- 包含firebase 项目授权处理程序 URI

这反过来会导致 CI​​CP 呈现并返回一个带有设置脚本的页面

var POST_BODY=""------WebKitFormBoundary9bn7AOpnZiIRk9qZ\r\nContent....."

即它不是解析表单主体并提取 SAMLResponse 字段,而是将整个 Request.body 重播到脚本中,然后调用 fireauth.oauthhelper.widget.initialize();

这显然失败了,因为往返然后尝试将整个响应主体作为查询字符串发布到 /__/auth/handler 端点。

我怀疑此链中缺少一个简单的配置项,因为所有流程对我来说看起来都很正常,直到将多部分表单数据推送到 POST_BODY,然后阻止将 SAML token 转换为 OAuth token 。

问题

在此(编辑的)设置中哪个配置项不正确,替换它的值的正确推导是什么?

最佳答案

也许 SAML 还存在其他技术问题,但至少在 sign-in 方法的使用方式上存在不连贯之处。

根据(官方文档)[ https://cloud.google.com/identity-platform/docs/how-to-enable-application-for-saml#handle-signin-with-client-sdk] ,您有 2 个登录选项:

1) 有弹窗

在这种情况下,您可以使用 promise 通过 sign-in 方法检索用户凭据:

firebase.auth().signInWithPopup(provider)
.then((result) => {
// User is signed in.
// Identity provider data available in result.additionalUserInfo.profile,
// or from the user's ID token obtained via result.user.getIdToken()
// as an object in the firebase.sign_in_attributes custom claim
// This is also available via result.user.getIdTokenResult()
// idTokenResult.claims.firebase.sign_in_attributes.
})
.catch((error) => {
// Handle error.
});

2) 带重定向

在这种情况下,您的代码应分为两部分。第一个 sign-in 方法,不使用任何 promise :

 firebase.auth().signInWithRedirect(provider);

然后,初始化一个“监听器”,以在登录重定向后检索用户凭据:

// On return.
firebase.auth().getRedirectResult()
.then((result) => {
// User is signed in.
// Identity provider data available in result.additionalUserInfo.profile,
// or from the user's ID token obtained via result.user.getIdToken()
// as an object in the firebase.sign_in_attributes custom claim
// This is also available via result.user.getIdTokenResult()
// idTokenResult.claims.firebase.sign_in_attributes.
})
.catch((error) => {
// Handle error.
});

添加到您的页面/应用程序的 Bootstrap 部分。

希望对您有所帮助。

关于google-cloud-platform - Google Cloud Identity Platform (CICP) SAML 工作流程失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60080401/

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