gpt4 book ai didi

java - 需要身份验证才能获得访问 token (不允许匿名)

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:56:39 24 4
gpt4 key购买 nike

我尝试修改现有示例 - Tonr2 and Sparklr2 .我还查看了基于 Spring Boot 的本教程 Spring Boot OAuth2 .我尝试像 Tonr2 示例中那样构建应用程序,但没有先登录(在 tonr2 上)。我只需要在 Sparklr2 端进行一次身份验证。我这样做:

@Bean
public OAuth2ProtectedResourceDetails sparklr() {
AuthorizationCodeResourceDetails details = new AuthorizationCodeResourceDetails();
details.setId("sparklr/tonr");
details.setClientId("tonr");
details.setTokenName("oauth_token");
details.setClientSecret("secret");
details.setAccessTokenUri(accessTokenUri);
details.setUserAuthorizationUri(userAuthorizationUri);
details.setScope(Arrays.asList("openid"));
details.setGrantType("client_credentials");
details.setAuthenticationScheme(AuthenticationScheme.none);
details.setClientAuthenticationScheme(AuthenticationScheme.none);
return details;
}

但我有 Authentication is required to obtain an access token (anonymous not allowed) 。我检查了 this question .当然,我的用户是匿名的——我想登录 Sparklr2。另外,我尝试了这个 bean 的不同设置组合,但没有什么好处。如何解决?如何让它按照我的意愿工作?

最佳答案

该职位迟到了将近两年。

异常是从AccessTokenProviderChain 抛出的

        Authentication auth = SecurityContextHolder.getContext().getAuthentication();

if (auth instanceof AnonymousAuthenticationToken) {
if (!resource.isClientOnly()) {
throw new InsufficientAuthenticationException(
"Authentication is required to obtain an access token (anonymous not allowed)");
}
}

你要么

  • 在您的 OAuth2RestTemplate 中使用 ClientCredentialsResourceDetails,或者
  • 在使用AuthorizationCodeResourceDetails 访问外部资源之前对用户进行身份验证

事实上,在tonr2和sparklr2的例子中(我个人觉得这个名字很困惑),要访问sparklr2上的资源,用户必须首先在tonr2。如 oauth2/tonr 中所示:

@Override

protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("marissa").password("wombat").roles("USER").and().withUser("sam")
.password("kangaroo").roles("USER");
}

如果您的用户是匿名的,您可能需要检查 Single Sign On .

对于那些只想快速试用 Oauth2 集成的人,请将基本身份验证添加到您的应用程序:

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated().and().httpBasic();
}

应用程序属性:

spring.security.user.password=password
spring.security.user.name=user

不要忘记将 spring-boot-starter-security 添加到您的项目中。

例如在 gradle 中:compile 'org.springframework.boot:spring-boot-starter-security'

或者您也可以通过以下方式禁止创建AnonymousAuthenticationToken:

@Override
protected void configure(HttpSecurity http) throws Exception {
http.anonymous().disable();
}

关于java - 需要身份验证才能获得访问 token (不允许匿名),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38104983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com