首页 文章

我们如何通过.NET Core上的Okta用户组进行筛选?

提问于
浏览
1

我正在使用ASP.NET Core MVC作为Web应用程序并使用策略来筛选页面 . 当我创建一个需求时,我能够找到OpenID Connect附带的所有常规声明(name,ver,iss,aud,iat等),但不能找到组,即使我在OpenID中添加了组在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;
    }

如何将Okta用户的组成员身份添加到用户对象的声明中,我需要做什么?


Update

我已经更新了OpenId中间件以包含范围内的组:

OpenIdConnectOptions opts = new OpenIdConnectOptions()
            {
                //...
            };
            opts.Scope.Clear();
            opts.Scope.Add("openid");
            opts.Scope.Add("profile");
            opts.Scope.Add("groups");

并确认服务器请求[Okta endpoint] / oauth2 / v1 / token和客户端请求/授权包括组,但仍未在声明中找到组 .

2 回答

  • 0

    如果您还没有这样做 - 您是否将groups范围添加到/authorize请求中?看起来您已经在Okta管理员端配置了组,但也需要从客户端请求它 .

    如果您要请求组范围,还有一些其他事项需要考虑:

    • 你有超过100组将被退回吗? scope dependent claims doc底部有一个说明,说明了这个限制 .

    • 如果您确认使用groups范围进行请求,并且它仍然无法正常工作 - 您是否可以检查从Okta返回的id_token并验证它是否包含这些组?如果是这样,那么这可能是.NET sdk中的一个错误(我们可以解决这个问题) .

  • 2

    由于cookie膨胀,FYI 2.0不再添加来自用户信息 endpoints 的所有内容 . 要让群组显示在我的声明中,我将其添加到AddOpenIdConnect选项...

    options.ClaimActions.Add(new CustomJsonClaimAction(ClaimTypes.Role, ClaimTypes.Role, (x) => string.Join(",", x["groups"].Values<string>())));
    

相关问题