如何从angular调用B2C图形API?
我试图理解如何调用graph API来使用msal angular(“azure/msal angular”):“^0.1.4”)提取一些用户信息。 我还没有找到这方面的工作示例/教程 我已经建立了一个Azure广告B2C。已创建以用户名作为登录密钥的本地帐户提供程序。 我创建了注册/登录流并注册了一个webapp“b2c-app01”。对于API权限,我授予应用程序“user.read”权限 我已使用msal的以下配置登录如何从angular调用B2C图形API?,angular,azure-ad-b2c,msal.js,Angular,Azure Ad B2c,Msal.js,我试图理解如何调用graph API来使用msal angular(“azure/msal angular”):“^0.1.4”)提取一些用户信息。 我还没有找到这方面的工作示例/教程 我已经建立了一个Azure广告B2C。已创建以用户名作为登录密钥的本地帐户提供程序。 我创建了注册/登录流并注册了一个webapp“b2c-app01”。对于API权限,我授予应用程序“user.read”权限 我已使用msal的以下配置登录 MsalModule.forRoot({ clie
MsalModule.forRoot({
clientID: "00000000-0000-0000-0000-000000000000", // b2c-app01 in app registration
authority: "https://b2c-app01.b2clogin.com/tfp/b2c-app01.onmicrosoft.com/B2C_1_SignInOrSignUp",
validateAuthority: false,
接下来,我将尝试按照这个示例访问GraphAPI
但是,我无法通过无声通话。我将['user.read']传递给scope,并得到以下错误
this._user = this.authService.getUser();
let tokenResponse = await this.authService.acquireTokenSilent(
['user.read'],
);
console.log(tokenResponse);
请求中提供的作用域“user.read”不受支持。
我尝试使用用户中返回的authority属性的标识提供程序url,但随后出现CORS错误。我甚至不知道这是否有效,所以我没有进一步研究CORS错误
this._user = this.authService.getUser();
let tokenResponse = await this.authService.acquireTokenSilent(
['user.read'],
this._user.identityProvider,
this._user,
);
console.log(tokenResponse);
被CORS策略阻止:请求的资源上不存在“Access Control Allow Origin”头。
关于我做错了什么或遗漏了什么,有什么建议吗
编辑:
下面是api权限
AAD B2C应用程序注册无法授予Graph API的权限。根据您所说的,您已经在B2C目录中创建了AAD应用程序注册 这是不可能的 “我创建了注册/登录流并注册了一个Web应用程序‘b2c-app01’。对于API权限,我授予了应用程序‘user.read’权限。” 您提到AAD B2C,但您的JS示例是针对AAD的。
对于AAD B2C用例,在用户令牌中返回所有必需的数据。对于任何其他图形api调用(如查询用户组),请调用您自己的api,该api使用客户端凭据对B2C租户中的AAD App Reg进行时间图形api身份验证。您是否尝试过在
用户前加前缀。使用图形URL读取范围,即https://graph.microsoft.com/User.Read
?只是黑暗中的一刀
本文描述了使用B2C应用程序调用Microsoft Graph的场景:
该文章实现的OAUTH场景是,也称为服务帐户或守护进程。我认为他们讨论的主要用例是使用Azure DevOps来维护身份策略,并通过对DevOps部署管道进行身份验证来自动上传策略
理想情况下,可以支持其他用户交互oauth流,例如or流。我没有意识到这一点,我也没有看到文档中提到的内容(然后再说一遍,文档一直指向其他部分,我很可能就是错过了)。请参阅所附的屏幕截图,看起来我已经授予了应用程序图形访问权限。好的,但此应用程序将无法作为B2C策略(用户流/自定义策略)执行的一部分启动。这将只适用于你的B2C租户的AAD端点。是的,我从那以后做了很多阅读,我误解了广告B2C的功能。我认为通过登录返回的id令牌,我可以——不知何故——直接控制对资源的访问。但是,正如你所说,我必须让webapp运行或添加功能,这就是客户端应用程序将调用的。我的理解正确吗?