【问题标题】:Get "groups" claims from Okta using the OpenID Connect Authorization Code Flow使用 OpenID Connect 授权代码流从 Okta 获取“组”声明
【发布时间】:2020-11-19 20:34:01
【问题描述】:

我正在尝试在用户验证后由 Okta 返回的内容中包含“组”声明。它在 response_type 为“id_token”时返回它们,但在 response_type 为“code”时不返回。对于授权代码流程,我希望从 userinfo 端点获取组声明,但它们不存在。 但是我读到授权代码流比混合流(id_token)更安全,所以我想确保没有办法做到这一点?

我的 webapp 是基于 ASPNET Core 3 构建的,我已经尝试过 Okta.AspNetCore Nuget 包。

【问题讨论】:

    标签: asp.net-core openid-connect okta


    【解决方案1】:

    可能会让您感到困惑的一件事是,Ok​​ta 确实返回了您要求的令牌,但您客户端中的 OpenIDConnect 处理程序阻止了它们。

    您需要在客户端中明确映射这些额外的声明,使用如下代码:

    options.ClaimActions.MapUniqueJsonKey("website", "website");
    options.ClaimActions.MapUniqueJsonKey("gender", "gender");
    options.ClaimActions.MapUniqueJsonKey("birthdate", "birthdate");
    

    还有这个选项可以设置:

    options.GetClaimsFromUserInfoEndpoint = true;
    

    请使用 Fiddler 等工具验证是否实际返回了声明。

    是的,授权代码流是您应该使用的目标。

    【讨论】:

    • 感谢@Tore 的建议,不幸的是仍然没有运气
    • 我会尝试使用 Fiddler 来确定您在登录过程中的进度。这里有很多可能出错的地方。
    【解决方案2】:

    /userinfo 响应应包含所有声明(对于包括授权代码流在内的所有流),包括“组”,只要在请求中发送组范围以生成令牌。

    您能否确保用户是该组的一部分并且在请求中传递了正确的范围?

    【讨论】:

    • 请不要以使它们看起来像问题的方式编写答案。有一些系统可以检查 Not An Answer (NAA) 帖子。这个答案被其中一个人错误地接受了。请考虑对其进行编辑以使其看起来更像一个答案。重新调整“您能否确保用户是该组的一部分并且在请求中传递了正确的范围?”部分。
    【解决方案3】:

    您也可以轻松地在访问令牌中添加“组”声明。您可以参考以下指南: https://developer.okta.com/docs/guides/customize-tokens-groups-claim/overview/

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 2018-05-20
      • 2015-12-11
      • 2017-06-28
      • 2019-10-24
      • 2021-04-12
      • 2018-12-19
      • 2023-03-27
      • 2019-05-18
      相关资源
      最近更新 更多