首页 > 解决方案 > 在使用 msal.js 的 Azure B2C 身份验证中,b2cScopes 的含义和语法是什么?

问题描述

我对在 ASP.NET Core 3.1 的 B2C 用例中实例化 Microsoft 身份验证库时使用的b2cScopes属性感到非常困惑。这是规范 示例,令人困惑的是,示例代码实际上并未实现helloapi演示api:

var appConfig = {
      b2cScopes: ["https://fabrikamb2c.onmicrosoft.com/helloapi/demo.read"],
      webApi: "https://fabrikamb2chello.azurewebsites.net/hello"
};

// instantiate MSAL
const myMSALObj = new Msal.UserAgentApplication(msalConfig);

但是这里有很多其他不同的b2cScopes格式,例如:

例 1.来源

b2cScopes: ["profile","email","openid", "https://lduceademo.onmicrosoft.com/big/read"]

例 2.来源

b2cScopes: ["openid"]

例 3.来源

b2cScopes: ['https://zzzzz.onmicrosoft.com/api/Hello.Read']

例 4.来源

b2cScopes: 'https://meeblitenant.onmicrosoft.com/api/myapp_read',
'https://meeblitenant.onmicrosoft.com/api/myapp_write']

例 5.来源

b2cScopes: ['https://my_app_name.onmicrosoft.com/my_api_name/user_impersonation email openid profile']

所以我有以下问题:

  1. .read.write方式映射到 HTTP GET、PUT、POST 权限?如果不是,这些后缀有什么作用?
  2. 此值是否不区分大小写(参见示例 3)?
  3. 一些示例似乎暗示了一个相对 URL,而其他示例暗示了一个完整的 URL。两者都正确吗?
  4. Ex 5 是否完全被破坏了,因为它使用空格来分隔范围而不是使用字符串数组?
  5. 如果我在api/user上实现了一个同时具有 HTTP GET、PUT 和 POST 动词的 webapi,那么b2cScope应该是什么?

标签: azure-ad-b2c

解决方案


.read 和 .write 后缀是否以某种方式映射到 HTTP GET、PUT、POST 权限?如果不是,这些后缀有什么作用?

否。您可以在 AAD B2C 控制面板中定义 API 的范围。它们可以随心所欲地调用,它们可以表示您在 API 中想要的任何东西。

此值是否不区分大小写(参见示例 3)?

我 90% 确定它们不区分大小写。

一些示例似乎暗示了一个相对 URL,而其他示例暗示了一个完整的 URL。两者都正确吗?

它们实际上不是 URL。它们是作用域的标识符。openid 和 profile 等一些范围是标准的 OpenID Connect 范围,它们指定 Id 令牌中所需的信息。对于调用 API,您需要一个完整的 URI 来标识您的应用所需的范围。

Ex 5 是否完全被破坏了,因为它使用空格来分隔范围而不是使用字符串数组?

那么它肯定使用错误的API。但这实际上是它们在 URL 中的发送方式,因此它可以工作。

如果我在 api/user 上实现了一个同时具有 HTTP GET、PUT 和 POST 动词的 webapi,那么 b2cScope 应该是什么?

您需要在 B2C 控制面板中定义它们。然后在您的应用程序中使用它们。您需要在 API 中添加授权检查以及检查这些范围。


推荐阅读