实现基于Spring Boot with Spring Security(OAuth2)。我有以下工作2LA流程:
client_secret
和grant_type=client_credential
向AS发送访问令牌请求。/check_token
endpoint验证访问令牌。问题:在上面的步骤1中,我需要对我的AS进行哪些更改,以便它接受基于JWT的访问令牌请求?
RP OAuth2客户端配置:
@Configuration
@EnableOAuth2Client
open class OAuth2ClientConfiguration {
val tokenUrl = "http://localhost:8180/oauth/token"
@Bean
open fun resource(): OAuth2ProtectedResourceDetails {
return ClientCredentialsResourceDetails().apply {
clientId = "demo-rp"
clientSecret = "rp-secret"
grantType = "client_credentials"
scope = listOf("quotes")
accessTokenUri = tokenUrl
}
}
@Bean
open fun restTemplate(): OAuth2RestOperations {
return OAuth2RestTemplate(
resource(),
DefaultOAuth2ClientContext(DefaultAccessTokenRequest()))
}
}
作为OAuth2配置:
@Configuration
@EnableAuthorizationServer
open class OAuth2Configuration : AuthorizationServerConfigurerAdapter() {
@Autowired
val authenticationManager: AuthenticationManager? = null
override fun configure(security: AuthorizationServerSecurityConfigurer) {
// @formatter:off
security
.tokenKeyAccess("isAnonymous() || hasAuthority('ROLE_TRUSTED_CLIENT')")
.checkTokenAccess("hasAuthority('ROLE_TRUSTED_CLIENT')")
// @formatter:on
}
override fun configure(clients: ClientDetailsServiceConfigurer) {
// @formatter:off
clients.inMemory()
.withClient("demo-rp")
.authorizedGrantTypes("client_credentials")
.authorities("ROLE_CLIENT", "ROLE_TRUSTED_CLIENT")
.scopes("quotes")
.secret("rp-secret")
.accessTokenValiditySeconds(60)
.and()
.withClient("demo-rs")
.authorizedGrantTypes("client_credentials")
.authorities("ROLE_CLIENT", "ROLE_TRUSTED_CLIENT")
.secret("rs-secret")
.accessTokenValiditySeconds(60)
// @formatter:on
}
override fun configure(endpoints: AuthorizationServerEndpointsConfigurer) {
// @formatter:off
endpoints
.authenticationManager(authenticationManager)
// @formatter:on
}
}
最后,我使用Nimbus OAuth2 SDK编写了一个客户端,该客户端发送了一个基于JWT的访问令牌请求。这是RP的一部分。
在AS中,我添加了一个jWTTokenEndpointAuthenticationFilter
,它检查ServletRequest
并使用手写的AuthenticationProvider
执行身份验证。
这里的示例为代码。此处为RP代码示例。
我想获取JWT Access令牌用于Docuse,我尝试使用以下代码获取访问令牌,之后我通过访问令牌创建信封,我得到一个错误 “调用创建信封时出错: { ”错误代码“: ”AUTHORIZATION_INVALID_TOKEN“,”消息“:”提供的访问令牌已过期、已吊销或格式不正确。 我从这个链接DocuSign JWT访问令牌请求以上代码,在用户提到的工作代码,请告诉我我犯了什么错误,注意:我正
客户端通过使用按附录B“application/x-www-form-urlencoded”格式在HTTP请求实体正文中发送下列UTF-8字符编码的参数向令牌端点发起请求: grant_type 必需的。值必须设置为“client_credentials”。 scope 可选的。如3.3节所述的访问请求的范围。 客户端必须如3.2.1所述与授权服务器进行身份验证。 例如,客户端使用传输层安全发起如
客户端通过使用按附录B“application/x-www-form-urlencoded”格式在HTTP请求实体正文中发送下列UTF-8字符编码的参数向令牌端点发起请求: grant_type 必需的。值必须设置为“password”。 username 必需的。资源所有者的用户名。 password 必需的。资源所有者的密码。 scope 可选的。如3.3节所述的访问请求的范围。 如果客户端类
客户端通过使用按附录B“application/x-www-form-urlencoded”格式在HTTP请求实体正文中发送下列UTF-8字符编码的参数向令牌端点发起请求: grant_type 必需的。值必须被设置为“authorization_code”。 code 从授权服务器收到的授权码。 redirect_uri 必需的,若“redirect_uri”参数如4.1.1节所述包含在授权请求
我很难让Auth0以JWT格式返回访问令牌。我需要JWT格式的文件,以便使用javajwt库验证它们。 我正在使用Auth0登录,并使用获取访问令牌-我尝试将访问群体设置为我们的API标识符(在多个位置,包括lock auth参数和负载),但没有成功-返回访问令牌,但不是JWT。 或者,是否有用于验证“本机”Auth0访问令牌的Java库? 返回的代码用于POST到
这是我的身份验证流程: 用户登录后收到两个令牌(具有过期时间的访问令牌和没有过期时间的刷新令牌) 对于每个用户,刷新令牌存储在数据库中名为refreshTokens的json列中(这是一个数组) 在客户端,访问令牌和刷新令牌都存储在本地存储器上 当需要验证用户时,如果访问令牌过期,将使用刷新令牌创建一个新的访问令牌,并将其发送回用户并保持用户登录 当用户注销时,数据库中存储的刷新令牌(在refre