Używam ASP.NET Core MVC dla aplikacji internetowej i przy użyciu zasad do przeglądania stron. Kiedy tworzę wymaganie, jestem w stanie znaleźć wszystkie zwykłe oświadczenia, które pochodzą z OpenID Connect (nazwa, ver, iss, aud, iat itp.), Ale nie grupy, mimo że dodałem grupy w OpenID Połącz konfigurację tokena w Okta.
Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthorization(options => {
options.AddPolicy("ActionPrivilegeRequired", policy => policy.Requirements.Add(new ActionPrivilegeRequirement()));
});
}
ActionPrivilegeRequirement.cs:
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, ActionPrivilegeRequirement requirement)
{
var groupMembership = context.User.FindFirst(
c => c.Type == "groups").Value;
// ...
return Task.CompletedTask;
}
Co muszę zrobić, aby dodać członkostwo grupy użytkowników Okta do oświadczeń obiektu użytkownika?
Aktualizacja:
Zaktualizowałem oprogramowanie pośrednie OpenId, aby uwzględnić grupy w zakresie:
OpenIdConnectOptions opts = new OpenIdConnectOptions()
{
//...
};
opts.Scope.Clear();
opts.Scope.Add("openid");
opts.Scope.Add("profile");
opts.Scope.Add("groups");
i potwierdził, że żądanie serwera do [punktu końcowego Okta] / oauth2 / v1 / token i żądanie klienta do / autoryzacji obejmują grupy, ale nadal nie znalazły grup w roszczeniach.
Odpowiedzi:
1 dla odpowiedzi № 1Jeśli jeszcze tego nie robisz - dodałeś grupy zakres do /autoryzować żądanie? Wygląda na to, że skonfigurowałeś grupy po stronie administratora Okta, ale musisz również poprosić o to klienta.
Jeśli pytasz o zakres grup, musisz rozważyć kilka innych rzeczy:
Czy masz ponad 100 grup, które zostaną zwrócone? Na dole jest notatka roszczenia zależne od zakresu dokument mówiący o tym limicie.
Jeśli potwierdzisz, że składasz wniosekz zasięgiem grup i nadal nie działa - czy możesz sprawdzić identyfikator id_token, który jest zwracany z Okty i sprawdzić, czy zawiera on grupy, czy nie? Jeśli tak, to może to być błąd w sdk .NET (który możemy otworzyć problem).
0 dla odpowiedzi nr 2
FYI 2.0 nie dodaje już wszystkiego od punktu końcowego informacji o użytkowniku z powodu rozdętego pliku cookie. Aby grupy pojawiały się w moich roszczeniach, dodałem to do opcji AddOpenIdConnect ...
options.ClaimActions.Add(new CustomJsonClaimAction(ClaimTypes.Role, ClaimTypes.Role, (x) => string.Join(",", x["groups"].Values<string>())));