OAuth2 Spring身份验证可以正常工作,但效果不正确

时间:2017-10-24 09:05:23

标签: java spring spring-security oauth-2.0

过去两周我坚持这一点,谷歌没有帮助。 (我不知道如何提出正确的问题以获得我需要的答案)

简短的问题是:

---------------

1)有人可以向我解释如何启用资源服务器以使用数据库进行身份验证而不是内存。

我尝试过:编辑OAuth2Config.java:方法configure(ClientDetailsS​​erviceConfigurer客户端)使用数据库,但它没有创建密钥或任何东西,但验证仍然有效......

2)也有人可以解释我如何使用Postman / curl /(其他)来检查身份验证是否正常工作。

下面解释

3)如果我在我的代码或maby中犯了错误,我做错了吗?请向我解释一下,为什么我这样做是错误的。我想从错误中吸取教训。

---------------

我不得不说我对spring和oauth很新。所以我的知识很少(我也是一名即将毕业的学生)

我正在使用Java(Netbeans 8.2)与Maven和Spring创建一个网上商店。我对API(身份验证和资源管理)负责

我最终需要的是一个可以打电话的工作WebshopAPI。网店本身托管在其他地方,所以我只需要api来验证并返回带有例如产品的JSON。

我使用this作为文档/指南

Link to bitbucket repo

目前,如果验证有效,我会坚持测试。当我运行应用程序并转到: localhost:8080 / getallproducts 时,我会看到一个登录屏幕。 用户名:user,密码:[来自控制台的字符串]。我收到了产品。现在,当我打开邮递员时,我转到相同的地址和用户oauth2来获取密钥。我仍然得到登录屏幕而不是密钥......我不知道如何更改它以使用客户端/秘密而不是用户名/密码。

如果我错过任何信息,请随时询问。

此外,如果一直在寻找合适的oauth2起点。我找到关于这个主题的每个帖子都以不同的方式做所有事情,为什么没有标准!我发现这非常令人沮丧/烦恼/压力很大。

2 个答案:

答案 0 :(得分:0)

首先,您需要设置授权服务器:

@Configuration
@EnableAuthorizationServer
protected static class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {

    @Autowired
    DataSource dataSource;

    @Bean
    public TokenStore tokenStore() {
        return new JdbcTokenStore(dataSource); // table = oauth_access_token
    }

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.tokenStore(tokenStore());
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.jdbc(dataSource); // table = oauth_client_details
    }
}

不要忘记填充oauth_client_details表。

资源服务器看起来不错。

我假设你想使用授权代码流?

邮差

  1. 点击请求网址下的“身份验证”标签,为请求添加权限。
  2. 类型为OAuth2.0
  3. “获取新访问令牌”
  4. 填写:

    Postman会将您重定向到用户确认页面。

    批准邮递员收到请求令牌后,将其添加到请求标头。 现在您应该能够访问资源服务器端点。

答案 1 :(得分:0)

发现它!如果你现在看看git,你会看到一些变化。我发现当我运行应用程序时,身份验证服务器没有启动。现在我将资源和认证服务器移动到主运行类,一切都开始工作了。感谢@JohanB