通过 Okta Spring Boot 在 Spring Boot 中使用 Okta 主体组和元数据

问题描述 投票:0回答:1

我在 Okta 中有一个 OIDC 应用程序,我用它来验证和授权我正在使用的 Web 应用程序:

  • spring-boot-starter-parent 3.3.3
  • okta-spring-boot-starter 3.0.7
  • thymeleaf-extras-springsecurity6 3.1.2.发布

此评论让我相信,在 Okta 中向我的授权服务器添加组声明会导致使用 okta-spring-boot-starter 时组自动转变为角色。 这不是我所经历的。

我的印象是,向校长请求权限会导致出现一个以 ROLE_ 开头的组列表

我的用户属于 Okta 中一个名为 App-User 的组。 如果我要求:

<div sec:authentication="principal.authorities">Roles</div>

我得到的回报是:

[App-User, Everyone, OIDC_USER, SCOPE_email, SCOPE_openid, SCOPE_profile]

这不起作用:

<div sec:authorize="hasRole('App-User')">You have the role</div>

但这确实:

<div sec:authorize="hasAuthority('App-User')">You have the authority</div>

我也觉得这很奇怪:

<div sec:authentication="principal.email"></div>

但这样做:

<div sec:authentication="principal.name"></div>

返回 Okta 中看似应用程序的客户端 ID,而不是用户名

00umarbvfdDvDofPu5d7

尝试获取principal.firstName会抛出错误,声称它不存在。

spring-boot okta
1个回答
0
投票

我发现这将为我提供主体上所有可用属性的列表:

<div sec:authentication="principal.attributes">Attributes</div>

从此,我发现我可以做到所有这些:

<div th:text="${#authentication.getPrincipal().getAttribute('name')}"></div>
<div th:text="${#authentication.getPrincipal().getAttribute('given_name')}"></div>
<div th:text="${#authentication.getPrincipal().getAttribute('family_name')}"></div>
<div th:text="${#authentication.getPrincipal().getAttribute('email')}"></div>
<div th:text="${#authentication.getPrincipal().getAttribute('groups')}"></div>

这符合我的目的,我可以接受使用 hasAuthority() 而不是 hasRole() 来显示目的

© www.soinside.com 2019 - 2024. All rights reserved.