Я пытаюсь контролировать авторизацию через регистрации приложений в Azure.
Сейчас у меня настроены две регистрации приложений.
ApiApp настроен с настройками по умолчанию, но я добавил это в манифест:
"oauth2Permissions": [
{
"adminConsentDescription": "Allow admin access to ApiApp",
"adminConsentDisplayName": "Admin",
"id": "<guid>",
"isEnabled": true,
"type": "User",
"userConsentDescription": "Allow admin access to ApiApp",
"userConsentDisplayName": "Admin",
"value": "Admin"
},
...
]
В регистрации клиентского приложения у меня есть все настройки по умолчанию, но я добавил:
- В ключах пароль для аутентификации приложения по AD
- В необходимых разрешениях я добавил ApiApp и потребовал делегированного разрешения «Администратор». Я сохранил это, нажал «Готово», затем нажал «Предоставить разрешения», чтобы убедиться, что разрешения были принудительно обновлены.
В моем клиентском приложении он использует этот код для аутентификации:
...
var context = new AuthenticationContext(authority);
var clientCredentials = new ClientCredential(<clientId>, <clientSecret>);
var result = await context.AcquireTokenAsync(<apiAppUri>, clientCredentials);
var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", result.AccessToken);
var webResult = await client.GetAsync(<api uri>);
My ApiApp просто использует встроенную авторизацию, если вы выбираете рабочие или школьные учетные записи при создании проекта Web API:
public void ConfigureAuth(IAppBuilder app)
{
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
TokenValidationParameters = new TokenValidationParameters {
ValidAudience = ConfigurationManager.AppSettings["ida:Audience"]
},
});
}
Это работает:
[Authorize]
public class ValuesController : ApiController
Эти не работают :
[Authorize(Users = "Admin")]
public class ValuesController : ApiController
или
[Authorize(Roles= "Admin")]
public class ValuesController : ApiController
Судя по тому, что я читаю, я считаю, что все настроено должным образом, кроме самого проекта ApiApp. Я думаю, что мне нужно настроить авторизацию по-другому или с дополнительной информацией, чтобы позволить областям oauth2Permission правильно использоваться для WebAPI.
Какие шаги я пропускаю, чтобы разрешить определенные области в WebAPI вместо только атрибута [Authorize]?
Я использовал Интеграция приложений с Azure Active Directory , чтобы помочь мне настроить регистрацию приложений, наряду с Служба для обслуживания вызовов с использованием учетных данных клиента , но я не могу найти именно то, что мне нужно для реализации кода в части веб-API.
UPDATE
Я нашел этот ресурс: Начало работы Azure AD .NET Web API *
Это показывает, что вы можете использовать этот код для проверки утверждений о объеме:
public IEnumerable<TodoItem> Get()
{
// user_impersonation is the default permission exposed by applications in Azure AD
if (ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/scope")
.Value != "user_impersonation")
{
throw new HttpResponseException(new HttpResponseMessage {
StatusCode = HttpStatusCode.Unauthorized,
ReasonPhrase = "The Scope claim does not contain 'user_impersonation' or scope claim not found"
});
}
...
}
Однако претензии, которые я получаю, не включают претензии по объему.