Получение претензий из области ресурсов IdentityServer
У меня возникли проблемы с получением IdentityServer для возврата любых претензий в области ресурсов. Я определяю объем ресурса как:
private static Scope Roles
{
get
{
return new Scope
{
Name = "roles",
DisplayName = "Roles",
Type = ScopeType.Identity,
Claims = new List<ScopeClaim>
{
new ScopeClaim(SecurityContants.ClaimTypes.Role)
}
};
}
}
private static Scope Api
{
get
{
return new Scope
{
Name = "api",
DisplayName = "Api",
IncludeAllClaimsForUser = true,
//i've also tried adding the claim directly
Type = ScopeType.Resource,
Emphasize = false
};
}
}
Затем они добавляются в коллекцию и возвращаются. В моем API Startup.cs я настраиваю как:
public void Configuration (IAppBuilder app)
{
JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>();
app.UseIdentityServerBearerTokenAuthentication(
new IdentityServerBearerTokenAuthenticationOptions
{
Authority = "http://localhost/security.tokenserver.site",
RequiredScopes = new[] { "api", "roles" },
RoleClaimType = "roles"
});
var config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
app.UseWebApi(config);
}
}
Моя конечная точка API просто:
public IEnumerable<string> Get()
{
var user = User as ClaimsPrincipal;
var claims = new List<string>();
foreach (var item in user.Claims)
{
claims.Add(item.Value);
}
return claims;
}
Вывод этого при вызове из моего пользовательского интерфейса после аутентификации:
[ "customer_svc", "api", "https://idsrv3/embedded", "https://idsrv3/embedded/resources", "1448048492", "1448044892" ]
Таким образом, первоначальный вход в систему в пользовательском интерфейсе работает (я вижу там утверждение о ролях), извлекает токен и передает его в API-интерфейс. Но я не вижу роли пользователя после того, как токен передан обратно в API.
Что мне не хватает?