22 votes

Azure AD B2C : Les clients doivent envoyer un client_secret lors du rachat d'une subvention confidentielle

J'essaie de configurer l'authentification pour une application Angular en utilisant le code d'autorisation et Azure AD B2C (oidc-client du côté client), mais j'obtiens ces erreurs d'Angular :

enter image description here

Après avoir regardé dans les journaux d'audit B2C, j'ai trouvé ce message d'erreur :

Les clients doivent envoyer un client_secret lorsqu'ils rachètent une subvention confidentielle.

Voici ma configuration côté client :

const settings = {
  stsAuthority: 'https://supportodqqcdev.b2clogin.com/supportodqqcDev.onmicrosoft.com/v2.0/.well-known/openid-configuration?p=B2C_1_SignUpSignInOdqPlatine',
  clientId: '8447df5b-35a0-40a7-944f-5dcce87a2193',
  clientRoot: 'https://localhost:4200',
  scope: 'openid https://supportodqqcDev.onmicrosoft.com/platineclientdev/read',
};
this.userManager = new UserManager({
  authority: settings.stsAuthority,
  client_id: settings.clientId,
  redirect_uri: `${settings.clientRoot}/signin-callback`,
  scope: settings.scope,
  response_type: 'code',
  post_logout_redirect_uri: `${settings.clientRoot}/signout-callback`,
  automaticSilentRenew: true,
  silent_redirect_uri: `${settings.clientRoot}/assets/signin-silent-callback.html`,
});

Si je modifie la configuration ci-dessus pour utiliser une instance locale d'IdentityServer, tout fonctionne comme prévu.

Quelqu'un peut-il m'indiquer où et comment je dois enquêter sur cette question ?

37voto

chrsi Points 83

J'ai eu exactement le même problème que vous et j'ai réussi à le résoudre.

AD vous demande le secret du client, car il n'est pas encore configuré pour PKCE. Pour dire à AD que vous voulez utiliser PKCE pour une url de redirection spécifique, vous devez définir son type à partir de 'Web' a 'Spa' . Cela peut être fait dans le manifeste.

Recherche de la propriété replyUrlsWithType dans le manifeste et recherchez votre .../signin-callback url. Changez son type en 'Spa' et vous devriez être bon.

eg. :

"replyUrlsWithType": [
    {
        "url": "http://localhost:8080/signin-callback",
        "type": "Spa"
    },
]

L'url configurée va maintenant disparaître de votre page d'autorisation mais c'est ok -> elle est toujours présente dans le Manifest. L'équipe MS travaille sur ce nouveau type.

Assurez-vous également que vous avez marqué votre application comme un client public.

Pour plus d'informations, voir ma réponse ici : Active Directory ne prend pas en charge le flux de codes d'autorisation avec PKCE ?

0voto

nzpcmad Points 15270

Votre image montre une erreur CORS.

Je ne suis pas sûr que oidc-client fonctionne OOTB avec B2C. C'est plutôt pour identityserver.

Jetez un coup d'œil à la échantillon msal.js .

0voto

Gary Archer Points 607

Je pense que votre code est correct mais ...

Aux dernières nouvelles, Azure AD n'autorise pas les appels inter-origines vers le point de terminaison du jeton - et ne prend donc pas en charge le flux de code d'autorisation (PKCE) que les SPA devraient utiliser en 2019.

Sauf erreur de ma part, cela signifie que vous devrez utiliser le flux implicite (non recommandé) lors de l'intégration avec Azure AD. Il y a des problèmes pour les SPA depuis quelques années maintenant.

Il y a quelques années, j'ai écrit quelques articles sur les SPA Azure. Je pense que certains de ces articles sont toujours d'actualité : https://authguidance.com/2017/11/30/azure-active-directory-setup/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X