Как заставить Firebase auth OAuthProvider добавлять дополнительные области с помощью поставщика OIDC

# #firebase #firebase-authentication #openid-connect #angularfire #google-identity

Вопрос:

Я добавил пользовательского поставщика OIDC в свою платформу идентификации Google. Я могу успешно пройти аутентификацию с его помощью, поэтому я знаю, что это не проблема с конфигурациями поставщика, но по какой-то причине, когда я пытаюсь добавить дополнительные области в запрос токена, новые области не отображаются в URL-адресе запроса. В блоке кода ниже я вижу объект OAuthProvider, показывающий дополнительные области, которые я добавил перед запросом signInWithPopup. Но после этого запроса, когда я проверяю полученный токен, он имеет только область «oidc», а дополнительные области не отображаются в URL-адресе всплывающего окна. Я пропустил какой-то дополнительный шаг или дополнительные области не работают с пользовательскими поставщиками OIDC в Firebase Auth?

     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
 

Любая помощь или подтверждение приветствуются до того, как мне придется свернуть свою собственную аутентификацию. Спасибо,

Комментарии:

1. У меня та же проблема, и об этом нет никакой информации 🙁

2. Когда я дважды проверил конфигурацию, кажется, что их нет в списке 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 Identity передает только определенные области в поле openid-конфигурация , которое поддерживается. Но я думаю, что это не должно быть так, чтобы обеспечить функциональность

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

Примеры: