Мой RBAC'd Web API безопасен, но роли не работают
У меня есть простое приложение "спа" ADAL.js на основе этого образца. Он вызывает API, являющийся частью одного и того же решения (поэтому я не думаю, что это проблема CORS, мы все в одном домене... одно и то же приложение)
Я настроил несколько пользовательских ролей в файле манифеста приложения моего AD-клиента. Я связал эти роли с некоторыми учетными записями пользователей. Когда я запускаю свой образец и вход в систему, он возвращает мне значения токенов пользователя, которые показывают, что правильная роль была применена к любому тестовому пользователю, с которым я решил войти...
Когда я звоню в API, где мы просто использовали [Authorize]
атрибут, все хорошо.
Например, этот оформленный контроллер работает нормально:
[Authorize]
public class ValuesController : ApiController
{
// GET api/values
public IEnumerable<string> Get(){...omitted....}
}
Тем не менее, это дает мне "отказано" ответ (буквально: Authorization has been denied for this request
):
[Authorize(Roles = "AdminAccess")]
public class ValuesController : ApiController
{
// GET api/values
public IEnumerable<string> Get()(){...omitted....}
}
Что я делаю неправильно? Кажется, сбой при развертывании в Azure, а также локально
Вот мой Startup.Auth.cs
учебный класс:
public partial class Startup
{
public void ConfigureAuth(IAppBuilder app) {
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
TokenValidationParameters = new TokenValidationParameters
{
ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
},
Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
});
}
}
}
1 ответ
Вам необходимо определить, какая претензия содержит роли. Вот пример:
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions()
{
Tenant = Tenant,
TokenValidationParameters = new TokenValidationParameters
{
ValidAudience = ValidAudience,
RoleClaimType = "roles"
}
});
Это заставляет промежуточное ПО сопоставлять значения в утверждении "роли" с ролями для созданного им участника.