如何在使用 microsoft graph 向 Azure AD B2 注册的应用程序多租户中实现用户同意以访问 Microsoft Calendar API?

问题描述 投票:0回答:1

我尝试通过选择“任何身份提供商或组织目录中的帐户(用于使用用户流对用户进行身份验证)”选项在 Azure AD B2C 上注册应用程序。我选择此选项,以便任何租户的所有个人帐户或工作帐户都可以登录。

但是,选择此选项会在添加 API 权限时在 Microsoft Graph 上创建委派权限,只有 openid 的选项,如下图所示。 看图片: Request API Permissions - Microsoft Graph - Delegated permissions type

因此,我添加了具有应用程序权限类型的calendars.read。看图片: Request API Permissions - Microsoft Graph - Application permissions type

API权限也已被授予管理员权限。看图片: Grant admin consent

我使用的依赖项是“@azure/msal-browser”:“^2.16.1”

这是我如何将其实现到我的 javascript 代码中:

const msalConfig = {
  auth: {
    clientId: envconfig.REACT_APP_MICROSOFT, //Application (client) ID
    redirectUri: envconfig.REACT_APP_BASE_URL,
    postLogoutRedirectUri: envconfig.REACT_APP_BASE_URL,
  },
  cache: {
    cacheLocation: "localStorage",
  },
};

const msalRequest = { scopes: ["user.read", "calendars.read"] };
const msalClient = new msal.PublicClientApplication(msalConfig);

async function MsalLogin() {
  try {
    const authResult = await msalClient.loginPopup({
      scopes: msalRequest.scopes,
      prompt: "select_account",
    });

    localStorage.setItem("_microsoftAccount", authResult.account.username);

    return authResult;
  } catch (error) {
    console.error("MsalLogin error:", error);
    throw error;
  }
}`

使用上面的配置,当我作为不同租户 (Azure AD) 的成员的用户尝试进入应用程序时,并在弹出窗口中显示需要管理员批准。 看图片: Need admin approval - error

问题:

在 Azure AD B2C 环境中适合执行哪些配置以及如何在 JavaScript 编码中实现这些配置,以便具有任何租户的工作或个人帐户的用户都可以在用户同意的情况下将其日历连接到我的应用程序,或者如果可能的话无需要求任何一方的批准。这样用户组织的管理员就不必批准登录我的应用程序?

如果有人理解这一点,请帮忙。如果还有其他信息需要分享,请告诉我。

我尝试过的:

  • 我尝试通过选择“任何组织目录中的帐户(任何 Microsoft Entra ID 租户 – 多租户)”来注册新应用程序。使用此选项,委派权限可以选择添加更多 api 权限,包括 calendars.read。我应用后,它仍然显示需要管理员批准。
  • 我试图找到经过验证的发布者来解决这个问题,但我不确定,因为Azure AD B2C没有此功能
  • 我尝试添加类型为signupsignin的用户流程,但我不明白如何实现它,以及这种方式是否可以解决我的问题。
  • 我已尝试通过更改为“是”来更改管理员同意设置 用户可以请求管理员同意他们无法使用的应用程序 同意选项,但不起作用

我的期望:

我希望任何租户都可以通过个人 Microsoft 帐户或工作帐户访问我的应用程序。而且我想使用图形 API 并使权限必须从用户端获得批准,这样管理员就不需要先授予权限,这样就不会出现弹出窗口需要管理员批准。

我的azure中的设置截图:

添加 API 权限的选项 - 用户

javascript azure outlook microsoft-graph-api azure-ad-b2c
1个回答
0
投票

注意:任何登录的用户都将根据其主租户设置而不是应用程序驻留租户进行身份验证。如果您使用

common
organizations
来验证用户身份,请确保用户所在租户具有正确的设置。

我通过选择 “任何组织目录中的帐户(任何 Microsoft Entra ID 租户 – 多租户)”选项在 Azure B2C 租户中创建了一个应用程序:

enter image description here

授予以下API权限:

enter image description here

B2C 租户(应用程序所在)的用户同意设置设置如下:

enter image description here

在另一个目录中,我添加了如下用户:

enter image description here

当我尝试使用另一个目录用户登录时,我收到了同样的错误

enter image description here

因此要解决错误,您必须更改用户所在目录中的用户同意设置,如下所示:

将管理员同意请求设置为“是”

enter image description here

用户必须请求访问权限:

enter image description here

请求获得批准后,用户即可成功登录

否则,通过以全局管理员身份登录(用户驻留租户的全局管理员)授予租户范围管理员同意

https://login.microsoftonline.com/organizations/v2.0/adminconsent ?client_id=ClientIDofB2CApp&scope=User.Read Calendars.Read&redirect_uri=https://jwt.ms &state=12345

用户将能够成功登录:

enter image description here

参考:

flutter - Azure AAD 需要管理员批准 - Stack Overflow 作者:junnas

© www.soinside.com 2019 - 2024. All rights reserved.