当前位置: 首页 > 知识库问答 >
问题:

oauth令牌终结点的密码

方祺
2023-03-14

我正在尝试将OAuth添加到使用Spring框架开发的rest服务中。我正在使用基于注释的配置和Spring Boot来运行它。

在我的项目中,我有以下课程:

@Configuration
@EnableWebSecurity
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecuritySettings extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("admin").password("123").authorities("ROLE_USER");
    }

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

我的授权服务器配置如下:

@Configuration
@EnableAuthorizationServer
public static class MyAuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory().withClient("web")
                .authorizedGrantTypes("password")
                .authorities("ROLE_CLIENT","ROLE_TRUSTED_CLIENT","ROLE_USER")
                .scopes("read", "write")
                .resourceIds(RESOURCE_ID);
    }
 }

当我向终端发出GET请求时,我被要求输入HTTP基本凭据。当我尝试使用admin用户登录时,以下内容会被记录下来

o.s.s.o.provider.endpoint.TokenEndpoint  : Handling error: NoSuchClientException, No client with requested id: admin

输入用户名为web工作,但我不知道它的密码。默认密码被记录,但也不起作用。

Using default security password: f23087f8-58ce-e3d-bc62-58bf0963e75c

那么这个密码是什么?我在哪里能找到它?我如何设置它?

共有2个答案

鲜于光赫
2023-03-14

这是OAuth访问令牌。它基于用户登录和密码,用于访问受保护的资源。URL"/oauth/Token"用于获取访问令牌,而不是可用的请求令牌。此请求在请求令牌秘密的基础上进行数字签名。

Oauth协议以以下方式使用此访问令牌:

>

用户在服务提供商的站点上被重定向,并在那里授权请求令牌。(如果通过Http basic进行授权,则应添加名为“authorization”和值为“basic EncodeBase64(“name:password”)”的请求头,其中EncodeBase64是一个函数,“name”和“password”是用户名和用户密码。

应用程序-消费者交换请求访问令牌上的令牌。

应用程序消费者向服务的API发送授权请求。

在OAuth 2开发者指南和Spring社交参考中找不到其他信息

我希望你已经得到了你问题的答案(或者更接近它)。=)

伯丁雷
2023-03-14

您正在使用的API来自此生成器类。

令牌终结点由客户端应用程序用于请求资源的访问令牌。它不被浏览器终端用户使用。OAuth2客户端通常被分配一个“客户端秘密”,他们可以使用该秘密在endpoint进行身份验证,通常使用OAuth 2.0规范中描述的基本身份验证。

因此,为了回答您的特定问题,您将在builder API上使用“secret”方法,并使用该值作为客户端进行身份验证:

clients.inMemory().withClient("web")
    .authorizedGrantTypes("password")
    .secret("webclientsecret")
    ...

此外,“密码”授予意味着客户端使用最终用户ID和密码请求令牌,只是为了确保这是您真正想要的。这与密码问题无关。

 类似资料:
  • 问题内容: 我正在使用Apache Oltu框架实现OAuth 2.0提供程序服务器,以寻找有关如何在Java中生成访问令牌和秘密令牌的想法。请指教。 问题答案: OAuth 2.0 规范并未说明如何生成令牌和秘密令牌。因此,由您决定是使用一些现有的/锚定数据来生成令牌,还是要使用随机序列来生成令牌。唯一的区别是,如果您使用大概已知的数据(例如,用户数据,例如用户名,创建日期等),则可以在需要时随

  • 我遇到了很多文章,很多文章建议使用OAuth over API密钥。据我所知,在OAuth中,我们最终获得了访问令牌,它的有效期为很多天。例如,QuickBooks online OAuth令牌的有效期为6个月。 因此,访问令牌等同于API Key。无论谁得到它,都应该像API密钥一样保护它。OAuth调用应该通过HTTPS进行,类似于基于API Key的调用。 相对于OAuth的另一个优势是授权

  • 尝试为Azure密钥库获取oauth2令牌,请遵循下面的教程。 https://docs.microsoft.com/en-us/azure/key-vault/general/tutorial-net-windows-virtual-machine

  • alexa skill不会将请求中的“客户端机密”发送到令牌endpoint,这会导致我的OAuth服务器中的帐户链接失败。请求正文包含:{'grant_type':'authorization_code','code':'*******','redirect_uri':'https://pitangui.amazon.com/api/skill/***“,”客户id:“******”}

  • 我实现了生成jwt令牌的oauth。我的令牌包含用户信息,如果我将其放入jwt.io中,则信息是可见的。有没有什么方法可以加密令牌,使其不被jwt.io解密?

  • 我尝试将运行在CloudFoundry上的现有Java应用程序迁移到KeyCloak,因此使用KeyCloak Servlet Filter。这是请求代码的第一步。但是将代码转换为令牌的第二步在“不正确redirect_uri”下失败了。这是奇怪的,因为我可以看到在两个请求KeyCloak服务器然后相同的URL作为redirect_url。 有人知道原因和解决办法吗?