如何让 Firebase auth OAuthProvider 使用 OIDC 提供程序添加其他范围

Posted

技术标签:

【中文标题】如何让 Firebase auth OAuthProvider 使用 OIDC 提供程序添加其他范围【英文标题】:How to get Firebase auth OAuthProvider to add additional scopes using OIDC provider 【发布时间】:2021-11-21 00:10:22 【问题描述】:

我已将自定义 OIDC 提供程序添加到我的 Google 身份平台。我可以成功地使用它进行身份验证,所以我知道这不是提供程序配置的问题,但是由于某种原因,当我尝试向令牌请求添加其他范围时,新范围不会出现在请求 url 中。在下面的代码块中,我看到 OAuthProvider 对象显示了我在请求 signInWithPopup 之前添加的其他范围。但是在此请求之后,当我验证收到的令牌时,它只有“oidc”范围,并且其他范围不会出现在弹出窗口的 URL 中。我是否遗漏了一些额外的步骤,或者其他范围不适用于 Firebase 身份验证中的自定义 OIDC 提供程序?

    let twitch = new firebase.auth.OAuthProvider('oidc.twitch');
    twitch.addScope('moderation:read');
    twitch.addScope('user:edit');
    console.log(twitch); // This shows the additional scopes requested
    const user = await this.auth.signInWithPopup(twitch); // This URL only shows the oidc scope
    console.log(user); // This user token does not have any additional scopes

在我必须自己进行身份验证之前,感谢任何帮助或确认。谢谢,

【问题讨论】:

我遇到了同样的问题,没有关于这个的信息:( 当我检查 twicth 配置时,它们似乎不在列表中 id.twitch.tv/oauth2/.well-known/openid-configuration 【参考方案1】:

使用重定向。

firebase.auth().getRedirectResult().then(function(result) 
  if (result.credential) 
    // This gives you the OAuth Access Token for that provider.
    var token = result.credential.accessToken;
  
  var user = result.user;
);

// Start a sign in process for an unauthenticated user.
var provider = new firebase.auth.OAuthProvider('google.com');
provider.addScope('profile');
provider.addScope('email');
firebase.auth().signInWithRedirect(provider);

使用弹出窗口。

var provider = new firebase.auth.OAuthProvider('google.com');
provider.addScope('profile');
provider.addScope('email');
firebase.auth().signInWithPopup(provider).then(function(result) 
 // This gives you the OAuth Access Token for that provider.
 var token = result.credential.accessToken;
 // The signed-in user info.
 var user = result.user;
);

【讨论】:

【参考方案2】:

Google 身份平台似乎只传递 openid-configuration scopes_supported 字段中定义的范围。但我认为,提供功能不应该是这样的


 ...
 "scopes_supported": [
  "openid",
  "email",
  "profile"
 ],
 ...

例子:

https://accounts.google.com/.well-known/openid-configuration https://login.salesforce.com/.well-known/openid-configuration https://login.windows.net/common/.well-known/openid-configuration

【讨论】:

以上是关于如何让 Firebase auth OAuthProvider 使用 OIDC 提供程序添加其他范围的主要内容,如果未能解决你的问题,请参考以下文章

试图让 firebase.auth().currentUser 成为一个承诺

如何修复 Firebase Auth 仅在刷新后工作?

Firebase Auth 密码重置:如何正确发送包含确认码的密码重置电子邮件?

Firebase Auth用户角色[重复]

如何从 firebase_auth 获取令牌

如何在 Firebase/Auth 上避免 UIWebView