我有一个WebApi2应用,该服务器用作我的应用前端的api。现在,我想使用AD B2C来管理我的用户-假设我想通过他们的角色(管理员或客户)来区分他们,为此,我相应地创建了两个b2c用户组。当用户登录时,我想为具有不同角色(组)的用户显示不同的内容。
我正在使用this example在我的WebApi2项目中设置Startup.Auth.cs
:
var tvps = new TokenValidationParameters
{
ValidAudience = clientId,
AuthenticationType = signUpSignInPolicy,
};
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
{
AccessTokenFormat = new JwtFormat(tvps, new OpenIdConnectCachingSecurityTokenProvider(String.Format(aadInstance, tenant, defaultPolicy))),
});
据我所知,b2c暂时不返回用户对索赔的怀疑。有人建议我在获取令牌后需要调用GraphApi来获取这些组并将其添加到用户的声明中:
private static async Task<string> GetGroups(string token, string userId)
{
using (var client = new HttpClient())
{
var requestUrl = $"https://graph.microsoft.com/v1.0/users/{userId}/memberOf?$select=displayName";
var request = new HttpRequestMessage(HttpMethod.Get, requestUrl);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
var response = await client.SendAsync(request);
var responseString = await response.Content.ReadAsStringAsync();
return responseString;
}
}
这就是我坚持的地方。如何注入代码以获取调用图的令牌?我搞砸了OAuthBearerAuthenticationOptions.Provider
:
Provider = new OAuthBearerAuthenticationProvider
{
OnValidateIdentity = (context) =>
{
// var token = ??
// var userId = <get from context's claims>
// var groups = GetGroups(token, userId);
// <add to claims>
return Task.CompletedTask;
}
},
...但是我不知道如何获得令牌。也许从一开始就错了,我需要另一种方法?
答案 0 :(得分:0)
不能使用客户令牌来调用AADGraph / MSGraph Apis。为了自动获取令牌以调用图形api,我们需要仅应用访问权限。我们需要在租户中配置一个应用程序,该应用程序的凭据用于获取令牌。然后,该令牌可用于调用memberOF Api(或其他需要或需要用户信息的其他api)
此处是有关在B2C依赖服务中如何调用AAD Graph API的示例和说明。 https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-devquickstarts-graph-dotnet