我的 b2c 上有 2 个 web api(A 和 B)。他们每个人分别发布自己的权限(scopeA1,scopeA2)和(scopeB1,scopeB2)。
在我的 Web 应用程序(已经配置并授予了对 api 和 4 个范围的访问权限)上,为了在身份验证期间获取两个 api 的授权代码,我尝试将我的 OpenIdConnectAuthenticationOptionsin 范围属性设置为包括 4 个范围。我收到错误 AADB2C90146:请求中提供的范围“scopeA1 scopeA2 scopeB1 scopeB2 openid offline_access”为访问令牌指定了多个资源,但不受支持。
如果我只为 web api A 或 B 指定范围,那么它会按照这个链接工作
如何让我的 Web 应用程序使用这两个 Web api,即使已授予两者的权限
感谢帮助
遵循本教程, 我可以使用ADAL创建用户,从而使该方案在ADB2C上正常工作。(这是该场景的上下文)
我的目标是发送用户邀请(电子邮件)以使他加入我的appp。
我发现在graph.microsoft.com(MS图而不是AD图)上,有一个可用于此目的的邀请管理器,并且可能是如果您在B2C Azure门户上创建用户时触发邀请的方式。
我是否应该以与AD相同的方式获取MS图上的令牌
var authenticationContext = new AuthenticationContext(AuthString,false);
var clientCred = new ClientCredential(ClientId,ClientSecret);
var authenticationResult = authenticationContext.AcquireTokenAsync(ResourceUrl,clientCred);
var令牌= authenticationResult.Result.AccessToken;
这一次ResourceUrl指向https://graph.microsoft.com
这是我的OwinOpenID AuthenticationCodeReceived回调:
AuthorizationCodeReceived = async (context) =>
{
// get authentication context
string userObjectID = context.AuthenticationTicket.Identity.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
AuthenticationContext authContext = new AuthenticationContext($"https://login.microsoftonline.com/{AuthenticationHelper.Tenant}", new NaiveSessionCache(userObjectID));
ClientCredential credential = new ClientCredential(AuthenticationHelper.ClientId, AuthenticationHelper.AppKey);
AuthenticationResult result = await authContext.AcquireTokenAsync("https://graph.windows.net", credential);
// ----> Token used on the authorization header for AD user management and work properly …Run Code Online (Sandbox Code Playgroud)