На Azure портале Azure не работает авторизация с ролями.

У меня есть образец, как легко настроить authorization входить в систему пользователей из моего Azureactive directory арендатор. Я сделал только одно изменение в этом коде, я отметил HomeController своей реализацией AuthorizeAttribute, поскольку пользователь не может находиться на моей странице без аутентификации / авторизации.

[Authorize(Roles = "Admin")]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

authorization Конфигурация указана ниже.

private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];
private static string tenant = ConfigurationManager.AppSettings["ida:Tenant"];
private static string postLogoutRedirectUri = ConfigurationManager.AppSettings["ida:PostLogoutRedirectUri"];

string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);

public void ConfigureAuth(IAppBuilder app)
{
    app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

    app.UseCookieAuthentication(new CookieAuthenticationOptions());

    app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = clientId,
                Authority = authority,
                PostLogoutRedirectUri = postLogoutRedirectUri,
                RedirectUri = postLogoutRedirectUri,
                Notifications = new OpenIdConnectAuthenticationNotifications
                {
                    AuthenticationFailed = context =>
                    { 
                        context.HandleResponse();
                        context.Response.Redirect("/Error?message=" + context.Exception.Message);
                        return Task.FromResult(0);
                    }
                }
            });
}

Этот код хорошо работает на моей локальной машине (я изменяю параметр конфигурации PostLogoutRedirectUri на https://localhost:port для локальной работы). Я могу получить Azure Active Directory Пользовательские данные и сделать фильтрацию атрибутов администратором role, Также хорошо работают такие методы, как IsInRole. Но при развертывании этого кода на портале Azure в браузере появляется следующая ошибка: у вас нет прав для просмотра этого каталога или страницы.,

Когда я открываю поток журнала портала, я вижу разметку страницы ошибки 403 с таким текстом: Ошибка HTTP 403.60 - Запрещено.

Моя конфигурация портала ниже:

  1. В списке служб приложений у меня есть приложение с именем:WebApp-OpenIDConnect.
  2. В контроле доступа (IAM) - я вижу своего пользователя, который имеет Owner роль.
  3. Я настроил раздел аутентификации / авторизации с включением аутентификации службы приложений. Кроме того, я установил значение Вход в систему с помощью Azure Active Directory в действии, когда запрос не прошел проверку подлинности, а также настроил Azure Active Directory с созданием нового приложения Azure Add.
  4. у меня уже есть Azure active directory группа с именем " Admin ". На странице обзора я вижу, что мой пользователь является членом этой группы.
  5. Я добавил описание ролей в манифест регистрации приложения, как показано ниже.

    "appRoles": [
    {
    "allowedMemberTypes": ["User"],
    "displayName": "Admin",
    "id": "637b0b37-####-####-####-############",
    "isEnabled": true,
    "description": "Admin description",
    "value": "Admin"      
    }]
    
  6. В Azure Active Directory / Enterprise applications / User and groups Я добавил своего пользователя и назначил ему роль администратора.

  7. Я проверил, что ClientId из моего app.config имеет тот же идентификатор, что и идентификатор приложения на странице регистрации приложения.
  8. Kudu (App services / Advanced tools) показывает мне следующие настройки приложения:
    • WEBSITE_AUTH_DEFAULT_PROVIDER "AzureActiveDirectory"

ОБНОВЛЕНИЕ: Если я удалю параметр Roles="Admin" из атрибута (оставьте только Authorize()), авторизация будет работать правильно, и даже сбор заявок содержит значение роли администратора в roles Запрос. Но когда я возвращаю параметр Roles обратно, снова появляется ошибка 403.

ОБНОВЛЕНИЕ 2: Я думаю, что проблема связана с различиями в типах ролей претензий. Когда я запускаю свое приложение локально. У меня есть имя типа заявки с пространством имен и в единой форме: http://schemas.microsoft.com/ws/2008/06/identity/claims/role (значение Admin), но когда я запускаю свое приложение на портале Azure Я вижу имя типа заявки во множественном числе и без пространства имен: role (значение равно Admin, как и предыдущее).

ОБНОВЛЕНИЕ3 Я попытался обновить имя RoleClaimType в своем разделе конфигурации, как показано ниже, пытаясь изменить несоответствие между типом утверждения роли в коллекции утверждений и ожидаемым RoleClaimType в ClaimsIdentity объект:

app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = clientId,
                Authority = authority,
                PostLogoutRedirectUri = postLogoutRedirectUri,
                RedirectUri = postLogoutRedirectUri,
                Notifications = new OpenIdConnectAuthenticationNotifications
                {
                    AuthenticationFailed = context =>
                    { 
                        context.HandleResponse();
                        context.Response.Redirect("/Error?message=" + context.Exception.Message);
                        return Task.FromResult(0);
                    }
                },
                TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters
                {
                    ValidateIssuer = false,
                    RoleClaimType = "roles",
                }
            });

но после развертывания моего приложения в Azure тип заявки по-прежнему имеет старое значение: RoleClaimType = http://schemas.microsoft.com/ws/2008/06/identity/claims/role и не был изменен моими изменениями конфигурации. Когда я запускаю локально - имя типа меняется.

Может ли кто-нибудь помочь с этим? Благодарю.

0 ответов

Другие вопросы по тегам