Я новичок в сервере идентификации и настроил его на свою разработку, и он в основном работает при использовании одного узла. Если я переключаюсь на 5 узлов, он иногда работает, а иногда нет.Service Fabric and Identity Server 4
У меня есть атрибут Authorize на контроллере, который расширяет базовый контроллер, который имеет функцию, которая получает роль пользователей от требований пользователей.
protected string GetUserRole()
{
var roleClaim = User.Claims.SingleOrDefault(c => c.Type == "role");
if (roleClaim == null)
{
throw new ArgumentNullException("Cant find role claim on: " + Request.Host.Host);
}
else
{
return roleClaim.Value;
}
}
Что произойдет, когда я оформлю санкционированный вызов (с маркером в заголовке), что roleClaim равно нулю, когда он выходит из строя. Затем я попытался позвонить, но на этот раз несанкционирован и получил тот же результат.
Это конфигурация для моего API:
app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
Authority = "http://localhost:19081/App/Identity",
ScopeName = "api1",
RequireHttpsMetadata = false,
AutomaticAuthenticate = true
});
Конфигурация сервера идентичности:
var cert = new X509Certificate2(Path.Combine(_contentRoot, "damienbodserver.pfx"), "");
services.AddDeveloperIdentityServer()
.SetSigningCredential(cert)
.AddInMemoryScopes(Scopes.Get())
.AddInMemoryClients(Clients.Get())
.AddResourceOwnerValidator<ResourceOwnerPasswordValidator>()
.AddProfileService<ProfileService>();
services.AddMvc();
Мой клиент:
public static IEnumerable<Client> Get()
{
return new[]
{
new Client()
{
ClientId = "myapi",
ClientSecrets = new List<Secret>
{
new Secret("secret".Sha256())
},
ClientName = "My Beautiful Api",
AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
AllowAccessTokensViaBrowser = true,
RequireConsent = false,
AllowedScopes = {
"openid",
"api1"
},
AllowedCorsOrigins = new List<string> {
"*"
},
Enabled = true
}
};
}
}
и область применения:
public static IEnumerable<Scope> Get()
{
return new List<Scope>
{
StandardScopes.OpenId,
StandardScopes.ProfileAlwaysInclude,
StandardScopes.EmailAlwaysInclude,
StandardScopes.OfflineAccess,
StandardScopes.RolesAlwaysInclude,
new Scope
{
Name = "api1",
DisplayName = "API 1",
Description = "API 1 features and data",
Type = ScopeType.Resource,
ScopeSecrets = new List<Secret>
{
new Secret("secret".Sha256())
},
Claims = new List<ScopeClaim>
{
new ScopeClaim("role")
}
}
};
}
Я попытался прочитать документацию, но мне кажется, что этого не хватает, поэтому мой вопрос первый:
Почему рольClaim существует только иногда?
И Второе:
Почему не Сервер идентификации реагирует с кодом 401 статуса, когда он не уполномочен и у меня есть [Авторизовать] на контроллере?