Asp.net core 2.1 OpenIdConnectOptions с областью не работает - PullRequest
0 голосов
/ 27 августа 2018

Скажите, пожалуйста, почему я не могу добавить область действия к OpenIdConnectOptions?Он не работает с клиентом ASP.NET Core MVC, но с клиентом js работает нормально!

Мой код ...

IdentityServer4 Регистрация клиента

public static IEnumerable<Client> GetClients()
{
    return new List<Client>
    {
        new Client
        {
          ClientId = "web",
          ClientName = "Web Client",
          AllowedGrantTypes = GrantTypes.Implicit,
          AllowAccessTokensViaBrowser = true,
          AlwaysIncludeUserClaimsInIdToken = true,
          RedirectUris = {"http://localhost:5002/signin-oidc"},
          PostLogoutRedirectUris = {"http://localhost:5002/signout-callback-oidc"},
          AllowedCorsOrigins = {"http://localhost:5002"},
          AllowedScopes =
            {
              IdentityServerConstants.StandardScopes.OpenId,
              IdentityServerConstants.StandardScopes.Profile,
              "api1"
            },
          AccessTokenLifetime = 300,
          IdentityTokenLifetime = 3600,
          AllowOfflineAccess = true,
        }
    };
}

Затем я добавляю код в клиент mvc для использования авторизации.

Клиент Mvc

JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

services.AddAuthorization(options =>
                options.AddPolicy("AdminsOnly", policyUser => 
                       { policyUser.RequireClaim("role", "admin"); }));

services.AddAuthentication(options =>
{
    options.DefaultScheme = "Cookies";
    options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
    options.SignInScheme = "Cookies";

    options.Authority = "http://localhost:5000";
    options.RequireHttpsMetadata = false;
    options.GetClaimsFromUserInfoEndpoint = true;
    options.Scope.Add("api1");

    options.ClientId = "web";
    options.SaveTokens = true;
});

Когда я пытаюсь переключиться надействие, помеченное атрибутом [authorize], я получаю сообщение об ошибке

Извините, произошла ошибка: invalid_scope.

Если я удаляю строку options.Scope.Add("api 1");, то аутентификация работает.Но в этом случае я не могу указать роли и многое другое ...

Проект можно скачать здесь

1 Ответ

0 голосов
/ 27 августа 2018

Добавьте эту строку в параметры AddOpenIdConnect вашего MVC-клиента, чтобы запросить идентификационный токен и токен доступа :

                    options.ResponseType = "id_token token";

Ваш JS-клиент запрашивает идентификационный токен и токен доступа , тогда как клиент MVC запрашивает только идентификационный токен , а области ресурсов не допускаются в идентификационные токены .См. http://docs.identityserver.io/en/release/endpoints/authorize.html:

id_token запрашивает токен идентификации (разрешены только области идентификаторов)

токен запрашивает токен доступа (разрешены только области ресурсов)

...