Я настраиваю сервер идентификации и не могу понять, почему я не могу получить доступ к недавно добавленной заявке с моего сайта MVC.
Я использую пример быстрого запуска № 5: ( Ссылка на github) со следующими изменениями на сервере идентификации:
public static IEnumerable<IdentityResource> GetIdentityResources()
{
return new List<IdentityResource>
{
new IdentityResources.OpenId(),
new IdentityResources.Profile(),
**new IdentityResource
{
Name = JwtClaimTypes.Role,
DisplayName = JwtClaimTypes.Role,
UserClaims = { JwtClaimTypes.Role }
}**
};
}
public static IEnumerable<Client> GetClients()
{
// client credentials client
return new List<Client>
{
new Client
{
ClientId = "mvc",
ClientName = "MVC Client",
AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,
ClientSecrets =
{
new Secret("secret".Sha256())
},
RedirectUris = { "http://localhost:5002/signin-oidc" },
PostLogoutRedirectUris = { "http://localhost:5002/signout-callback-oidc" },
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"api1",
**JwtClaimTypes.Role**
},
AllowOfflineAccess = true
}
};
}
public static List<TestUser> GetUsers()
{
return new List<TestUser>
{
new TestUser
{
SubjectId = "1",
Username = "alice",
Password = "password",
Claims = new List<Claim>
{
new Claim("name", "Alice"),
new Claim("website", "https://alice.com"),
**new Claim(JwtClaimTypes.Role, "Admin")**
}
}
};
}
И со следующими изменениями в проекте mvc
.AddOpenIdConnect("oidc", options =>
{
options.SignInScheme = "Cookies";
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.ClientId = "mvc";
options.ClientSecret = "secret";
options.ResponseType = "code id_token";
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("api1");
options.Scope.Add("offline_access");
**options.Scope.Add(JwtClaimTypes.Role);**
});
Пока я не вижу заявки на роль впретензии на ClaimsPrincipal в приложении MVC.Я уверен, что что-то мне не хватает.Я могу добавить претензию к своему методу доступа и найти его там.Я также пытался внедрить ProfileService, чтобы добавить туда заявку, но все равно не смог найти ее в ClaimsPrincipal после входа в систему. Просьба просветить меня =)
Служба моего профиля:
public Task GetProfileDataAsync(ProfileDataRequestContext context)
{
var user = Config.GetUsers().First();
var claims = new List<Claim>
{
new Claim(JwtClaimTypes.Role, "Admin"),
};
context.IssuedClaims.AddRange(claims);
return Task.FromResult(0);
}