我尝试通过选择“任何身份提供商或组织目录中的帐户(用于使用用户流对用户进行身份验证)”选项在 Azure AD B2C 上注册应用程序。我选择此选项,以便任何租户的所有个人帐户或工作帐户都可以登录。
但是,选择此选项会在添加 API 权限时在 Microsoft Graph 上创建委派权限,只有 openid 的选项,如下图所示。 看图片:
因此,我添加了具有应用程序权限类型的calendars.read。看图片:
我使用的依赖项是“@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) 的成员的用户尝试进入应用程序时,并在弹出窗口中显示需要管理员批准。 看图片:
在 Azure AD B2C 环境中适合执行哪些配置以及如何在 JavaScript 编码中实现这些配置,以便具有任何租户的工作或个人帐户的用户都可以在用户同意的情况下将其日历连接到我的应用程序,或者如果可能的话无需要求任何一方的批准。这样用户组织的管理员就不必批准登录我的应用程序?
如果有人理解这一点,请帮忙。如果还有其他信息需要分享,请告诉我。
我希望任何租户都可以通过个人 Microsoft 帐户或工作帐户访问我的应用程序。而且我想使用图形 API 并使权限必须从用户端获得批准,这样管理员就不需要先授予权限,这样就不会出现弹出窗口需要管理员批准。
我的azure中的设置截图:
添加 API 权限的选项 - 用户
注意:任何登录的用户都将根据其主租户设置而不是应用程序驻留租户进行身份验证。如果您使用
或common
来验证用户身份,请确保用户所在租户具有正确的设置。organizations
我通过选择 “任何组织目录中的帐户(任何 Microsoft Entra ID 租户 – 多租户)”选项在 Azure B2C 租户中创建了一个应用程序:
授予以下API权限:
B2C 租户(应用程序所在)的用户同意设置设置如下:
在另一个目录中,我添加了如下用户:
当我尝试使用另一个目录用户登录时,我收到了同样的错误:
因此要解决错误,您必须更改用户所在目录中的用户同意设置,如下所示:
将管理员同意请求设置为“是”:
用户必须请求访问权限:
请求获得批准后,用户即可成功登录
否则,通过以全局管理员身份登录(用户驻留租户的全局管理员)授予租户范围管理员同意:
https://login.microsoftonline.com/organizations/v2.0/adminconsent ?client_id=ClientIDofB2CApp&scope=User.Read Calendars.Read&redirect_uri=https://jwt.ms &state=12345
用户将能够成功登录:
参考: