首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Azure B2C引发访问令牌验证失败。无效听众

Azure B2C引发访问令牌验证失败。无效听众
EN

Stack Overflow用户
提问于 2022-08-10 08:25:24
回答 1查看 440关注 0票数 0

我试图在我的react应用程序中使用Microsoft B2C AD,并使用图形SDK尝试在react应用程序中获取用户信息。

我能够成功地登录,使用用户流,并获得ID-令牌登录后。

现在,当我尝试使用Graph获取用户配置文件或使用acquireTokenSilent方法获取令牌时,我得到的是一个不同的错误:-

代码语言:javascript
运行
复制
import React from 'react';
import {
  AuthenticatedTemplate,
  UnauthenticatedTemplate,
  useMsal,
} from '@azure/msal-react';
import { loginRequest } from '../authConfig';

import { AuthCodeMSALBrowserAuthenticationProvider } from '@microsoft/microsoft-graph-client/authProviders/authCodeMsalBrowser';
import { InteractionType } from '@azure/msal-browser';
import { Client } from '@microsoft/microsoft-graph-client';

const Home = () => {
  const { instance } = useMsal();
  const { accounts } = useMsal();
  let graphClient = undefined;

  const scopes = [
    'openid',
    'offline_access',
    'https://my-tanent.onmicrosoft.com/my-app/user.read',
  ];

  const authProvider = new AuthCodeMSALBrowserAuthenticationProvider(instance, {
    account: accounts[0],
    scopes,
    interactionType: InteractionType.Popup,
  });

  function ensureClient() {
    graphClient = Client.initWithMiddleware({
      authProvider: authProvider,
    });

    return graphClient;
  }

  async function getUser() {
    ensureClient();

    // Return the /me API endpoint result as a User object
    const user = await graphClient
      .api('/me')
      // Only retrieve the specific fields needed
      .select('displayName,mail,mailboxSettings,userPrincipalName')
      .get();

    console.log(user);
  }

//just to check the token
  const getAccessToken = async () => {
    try {
      const token = await instance.acquireTokenSilent({
        scopes,
      });

      console.log(token);
    } catch (error) {
      console.error(error);
    }
  };

  return (
    <>
      <UnauthenticatedTemplate>
        <h3 className="h3">Login</h3>
        <button onClick={() => instance.loginPopup(loginRequest)}>Login</button>
      </UnauthenticatedTemplate>

      <AuthenticatedTemplate>
        <div className="App">
          <header className="App-header">
            <p>Hello {accounts[0]?.name}!</p>

            <button
              onClick={() =>
                instance.logoutRedirect({ postLogoutRedirectUri: '/' })
              }
            >
              Logout
            </button>

            <button onClick={() => getUser()}>Get User</button>

            <button onClick={() => getAccessToken()}>AcquireTokenSilent</button>
          </header>
        </div>
      </AuthenticatedTemplate>
    </>
  );
};

图SDK = Error:访问令牌验证失败。无效观众。在第二个方法中,我得到了一个访问令牌,但是当我解密它时,它看起来像是ID-令牌,因为aud是客户端ID:- 请查看此以了解更多有关令牌的信息。

代码语言:javascript
运行
复制
 "exp": 1660120614,
  "nbf": 1660117014,
  "aud": "my-client-id",
  "sub": "df5a1676-74bb-46b6-9116-a5fa125941da",
  "name": "Parteek",
  "postalCode": "246401",
  "tfp": "B2C_1_susi",
  "nonce": "9f13aefb-1a6e-4818-a39e-4f1369ca67d8",
  "scp": "user.read",
  "azp": "93dee6ed-1f87-4f0f-bedb-fd3f1a03b0ed",
  "ver": "1.0",
  "iat": 1660117014

第二次尝试与作用域更改

代码语言:javascript
运行
复制
 const scopes = [
    'openid',
    'offline_access',
    'https://graph.microsoft.com/.default',
  ];

具有此范围值:-

Graph错误=访问令牌未定义:从PublicClientApplication acquireTokenSilent接收到的空访问令牌:访问令牌为空。

对我的蔚蓝账户的权限

我不知道为什么我会收到这些错误,这是与权限有关还是我以错误的方式实现了它?

EN

回答 1

Stack Overflow用户

发布于 2022-08-16 12:15:46

  1. 看起来,您可能必须使用客户端凭据流,这样服务器将代表用户调用graph,因为在针对azure ad b2c进行身份验证时不可能直接使用它。
  2. 或者创建配置文件,编辑用户流,然后使用该流。

另外,请注意:如果您使用受支持的帐户类型作为任何身份提供者在B2C租户中注册应用程序,那么您可能无法使用该应用程序执行图形操作。

  • 您可以在Azure B2C中注册应用程序,并将其与Azure关联到客户机Id和机密以及它的详细信息i.e;use client_credentials来调用Graph。
  • 还要确保您拥有正确的api权限,如Application.ReadWrite.All、User.Read.All Directory.Read.All (或) Directory.ReadWrite.All被授予管理许可。
  • 请确保您对Web授予API访问权限,以便返回访问令牌:请参见请求访问令牌- Azure Active Directory B2C Microsoft文档

参考资料:

  1. reactjs -用户可以通过Graph更新自己的Azure B2C帐户的详细信息吗?-堆栈溢出
  2. Azure AD B2C: AcquireTokenSilentAsync返回空访问令牌-堆栈溢出
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73303046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档