azure-ad-b2c - 在使用 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']
所以我有以下问题:
- 做.read和.write方式映射到 HTTP GET、PUT、POST 权限?如果不是,这些后缀有什么作用?
- 此值是否不区分大小写(参见示例 3)?
- 一些示例似乎暗示了一个相对 URL,而其他示例暗示了一个完整的 URL。两者都正确吗?
- Ex 5 是否完全被破坏了,因为它使用空格来分隔范围而不是使用字符串数组?
- 如果我在api/user上实现了一个同时具有 HTTP GET、PUT 和 POST 动词的 webapi,那么b2cScope应该是什么?
解决方案
.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 中添加授权检查以及检查这些范围。