Скажите, пожалуйста, почему я не могу добавить область действия к 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");
, то аутентификация работает.Но в этом случае я не могу указать роли и многое другое ...
Проект можно скачать здесь