【发布时间】:2019-05-02 17:39:15
【问题描述】:
我有一个 WebApi2 应用程序,它作为我的应用程序前端的 api 服务。现在我想使用 AD B2C 来管理我的用户 - 假设我想通过他们的角色(管理员或客户)来区分他们,为此我相应地创建了两个 b2c 用户组。当用户登录时,我想为具有不同角色(组)的用户显示不同的内容。
我在我的 WebApi2 项目中使用this example 来设置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 目前不会在声明中返回用户的 grups。有人建议我在获取令牌后需要调用 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;
}
},
...但我不知道如何获得令牌。也许从一开始就错了,我需要另一种方法?
【问题讨论】:
标签: c# azure asp.net-web-api2 azure-ad-b2c