我正在使用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 回答
如果您还没有这样做 - 您是否将groups范围添加到/authorize请求中?看起来您已经在Okta管理员端配置了组,但也需要从客户端请求它 .
如果您要请求组范围,还有一些其他事项需要考虑:
你有超过100组将被退回吗? scope dependent claims doc底部有一个说明,说明了这个限制 .
如果您确认使用groups范围进行请求,并且它仍然无法正常工作 - 您是否可以检查从Okta返回的id_token并验证它是否包含这些组?如果是这样,那么这可能是.NET sdk中的一个错误(我们可以解决这个问题) .
由于cookie膨胀,FYI 2.0不再添加来自用户信息 endpoints 的所有内容 . 要让群组显示在我的声明中,我将其添加到AddOpenIdConnect选项...