У меня развернут сервер keycloak, и я пытаюсь обеспечить правильную работу ролей в моем приложении ASP.NET Core MVC. Токен из keycloak возвращает роли. Меня можно прекрасно перенаправить и аутентифицировать из keycloak. Кажется, я просто не могу заставить работать ни одну роль.
Startup.cs:
builder.Services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
options.LoginPath = "/Account/Login";
})
.AddOpenIdConnect(options =>
{
options.Authority = "https://MyServer/auth/realms/ATG";
options.MetadataAddress = "https://MyServer/realms/ATG/.well-known ... figuration";
options.ClientId = "ATG.ad.yaskawa.com";
options.ClientSecret = "tpdyzbDOADYdsCUaoFz9bTJNqRsOsrcQ";
options.ResponseType = "code";
options.SaveTokens = true;
options.Scope.Add("openid");
options.CallbackPath = "/signin-oidc"; // Update callback path
options.SignedOutCallbackPath = "/signout-callback-oidc"; // Update signout callback path
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "preferred_username",
RoleClaimType = "roles"
};
});
builder.Services.AddTransient();
//Fix Telerik camelCase to PascalCase
builder.Services.AddControllersWithViews().AddJsonOptions(options =>
options.JsonSerializerOptions.PropertyNamingPolicy = null); ;
ConfigurationManager configuration = builder.Configuration;
IdentityModelEventSource.ShowPII = true;
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseMigrationsEndPoint();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();
Токен:
{
"exp": 1720548651,
"iat": 1720548351,
"auth_time": 1720548351,
"jti": "b9aca179-91c9-4528-834e-29f5d33e0308",
"iss": "https://MyServer/realms/ATG",
"aud": "account",
"sub": "1ab9a926-d2a9-4941-9a01-ffe07d500abd",
"typ": "Bearer",
"azp": "ATG.ad.yaskawa.com",
"sid": "fd0c995d-3ec7-4bec-8a0c-18449b393ee8",
"acr": "1",
"scope": "email profile",
"email_verified": true,
"roles": [
"Admin",
"view-profile"
],
"name": "Eric Obermuller",
"preferred_username": "myEmail@yaskawa.com",
"given_name": "Eric",
"family_name": "O",
"email": "myEmail@yaskawa.com"
}
Поэтому я действительно не знаю, что делать. Я попробовал использовать пользовательское преобразование ролей, но в Principal.identity ничего не говорится о свойстве "роли".
public class CustomRoleClaimsTransformation : IClaimsTransformation
{
public Task TransformAsync(ClaimsPrincipal principal)
{
var identity = (ClaimsIdentity)principal.Identity;
// Ensure roles are being extracted and mapped correctly
var roles = identity.FindAll("roles").Select(c => c.Value).ToList();
foreach (var role in roles)
{
identity.AddClaim(new Claim(ClaimTypes.Role, role));
}
return Task.FromResult(principal);
}
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... tain-roles
Keycloak с приложением ASP.NET Core MVC, утверждения никогда не содержат роли ⇐ C#
Место общения программистов C#
1731630064
Anonymous
У меня развернут сервер keycloak, и я пытаюсь обеспечить правильную работу ролей в моем приложении ASP.NET Core MVC. Токен из keycloak возвращает роли. Меня можно прекрасно перенаправить и аутентифицировать из keycloak. Кажется, я просто не могу заставить работать ни одну роль.
Startup.cs:
builder.Services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
options.LoginPath = "/Account/Login";
})
.AddOpenIdConnect(options =>
{
options.Authority = "https://MyServer/auth/realms/ATG";
options.MetadataAddress = "https://MyServer/realms/ATG/.well-known/openid-configuration";
options.ClientId = "ATG.ad.yaskawa.com";
options.ClientSecret = "tpdyzbDOADYdsCUaoFz9bTJNqRsOsrcQ";
options.ResponseType = "code";
options.SaveTokens = true;
options.Scope.Add("openid");
options.CallbackPath = "/signin-oidc"; // Update callback path
options.SignedOutCallbackPath = "/signout-callback-oidc"; // Update signout callback path
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "preferred_username",
RoleClaimType = "roles"
};
});
builder.Services.AddTransient();
//Fix Telerik camelCase to PascalCase
builder.Services.AddControllersWithViews().AddJsonOptions(options =>
options.JsonSerializerOptions.PropertyNamingPolicy = null); ;
ConfigurationManager configuration = builder.Configuration;
IdentityModelEventSource.ShowPII = true;
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseMigrationsEndPoint();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();
Токен:
{
"exp": 1720548651,
"iat": 1720548351,
"auth_time": 1720548351,
"jti": "b9aca179-91c9-4528-834e-29f5d33e0308",
"iss": "https://MyServer/realms/ATG",
"aud": "account",
"sub": "1ab9a926-d2a9-4941-9a01-ffe07d500abd",
"typ": "Bearer",
"azp": "ATG.ad.yaskawa.com",
"sid": "fd0c995d-3ec7-4bec-8a0c-18449b393ee8",
"acr": "1",
"scope": "email profile",
"email_verified": true,
"roles": [
"Admin",
"view-profile"
],
"name": "Eric Obermuller",
"preferred_username": "myEmail@yaskawa.com",
"given_name": "Eric",
"family_name": "O",
"email": "myEmail@yaskawa.com"
}
Поэтому я действительно не знаю, что делать. Я попробовал использовать пользовательское преобразование ролей, но в Principal.identity ничего не говорится о свойстве "роли".
public class CustomRoleClaimsTransformation : IClaimsTransformation
{
public Task TransformAsync(ClaimsPrincipal principal)
{
var identity = (ClaimsIdentity)principal.Identity;
// Ensure roles are being extracted and mapped correctly
var roles = identity.FindAll("roles").Select(c => c.Value).ToList();
foreach (var role in roles)
{
identity.AddClaim(new Claim(ClaimTypes.Role, role));
}
return Task.FromResult(principal);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78727298/keycloak-with-asp-net-core-mvc-app-claims-never-contain-roles[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия