问题描述
我有一个带有几个其他端点的spring boot应用程序。我试图将oaut2和okta一起使用,以根据角色限制对这些端点的访问。到目前为止,我已经做到了:
我已经可以通过致电获得BEARER令牌:
oauth2 / default / v1 /令牌
然后,我可以使用令牌来攻击本地主机中的端点。
我尝试使用其中一些https://developer.okta.com/blog/2017/10/13/okta-groups-spring-security
实现基于用户组的访问。现在的问题是,在调用oauth2 / default / v1 / token时,我使用的是应用程序中提供的用户名和密码作为客户端ID和客户端凭据。
是否可以通过调用包含用户特定信息的/ token端点来生成令牌?
解决方法
Okta尚未公开公共API来生成令牌,但是可以使用api /api/internal/tokens
来生成令牌,Okta UI使用此API生成令牌
大多数用户范围的OAuth流都包括当您将用户重定向到授权端点时通过浏览器进行身份验证。如果您无法执行此操作,则可以进行一系列后端调用,以通过授权码流(建议)或隐式流(不那么安全)来接收令牌。请注意,只有在有问题的用户掌握Okta的情况下,此选项才有效(又名,该用户在Okta中具有密码并且未联盟)
- 对/authn进行主身份验证,以提供用户的用户名/密码
- 如果不需要用户回答MFA挑战,则此呼叫返回的状态将为SUCCESS,并且您将在响应中返回sessionToken
- 包括sessionToken as a parameter in your authorize request,以请求分配给相关应用程序的用户的授权码(授权码流)或令牌(隐式流)。
- 如果使用授权码流,请调用/ token端点以取回令牌。如果使用隐式流,则您已经有令牌