Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要帮助向spring boot microservices添加OAuth2安全性吗_Java_Spring Boot_Spring Security_Oauth 2.0 - Fatal编程技术网

Java 需要帮助向spring boot microservices添加OAuth2安全性吗

Java 需要帮助向spring boot microservices添加OAuth2安全性吗,java,spring-boot,spring-security,oauth-2.0,Java,Spring Boot,Spring Security,Oauth 2.0,我创建了一组spring boot微服务,大致遵循了我找到的教程。我已经成功地启动并运行了我的项目,而没有尝试保护rest端点或用户界面。但最终我需要使用LDAP保护所有内容,并且需要根据用户角色有条件地允许访问用户界面部分。目前,在不涉及LDAP的情况下,我已经尝试了大约20篇关于如何结合OAuth2使用内存中身份验证的教程,我无法理解要实现这一点,我到底需要做些什么 我创建了一个包含两个分支的。第一个分支称为no authentication,它在尝试添加验证之前演示了我的项目的简化版本。自

我创建了一组spring boot微服务,大致遵循了我找到的教程。我已经成功地启动并运行了我的项目,而没有尝试保护rest端点或用户界面。但最终我需要使用LDAP保护所有内容,并且需要根据用户角色有条件地允许访问用户界面部分。目前,在不涉及LDAP的情况下,我已经尝试了大约20篇关于如何结合OAuth2使用内存中身份验证的教程,我无法理解要实现这一点,我到底需要做些什么

我创建了一个包含两个分支的。第一个分支称为
no authentication
,它在尝试添加验证之前演示了我的项目的简化版本。自述文件描述了项目组成,但它本质上是一个配置服务器、一个服务注册表、一个具有两个未经身份验证的端点的rest资源,以及一个访问这两个端点的用户界面模块

其思想是,第一个端点最终需要一个组成员身份(“用户”),另一个端点需要另一个组成员身份(“管理员”)。但我还没走到这一步

第二个分支称为
oauth服务器
。该分支添加了另一个名为oauth2服务器的spring引导模块,该模块包含我的用户界面转发到的代码,以便进行身份验证

我希望看到一个登录页面,但当我输入有效凭据(用户/用户或管理员/管理员)时,我在页面上看到一个错误:

OAuth Error
error="invalid_grant", error_description="Invalid redirect: http://localhost:8084/authtest/login does not match one of the registered values."
我对这一领域完全是新手,我一直在用各种各样的努力来实现这一目标。您可以直接查看代码,并且需要精通才能理解设置。下面大致介绍了如何设置身份验证

需要进行身份验证的ui称为
身份验证测试ui
。它的配置可以在它的
resources/bootstrap.yml
中找到,它的其余配置来自控制中心/config服务器模块的类路径,源代码位于
resources/config repo/authentication test ui.yml
。这是安全配置:

gateway-server: 'http://localhost:8901/authserver'

security:
  oauth2:
    client:
      client-id: ui
      client-secret: uisecret
      scope: ui
      access-token-uri: ${gateway-server}/oauth/token
      user-authorization-uri: ${gateway-server}/oauth/authorize
      pre-established-redirect-uri: http://localhost:8084/authtest
    resource:
      user-info-uri: ${gateway-server}/userInfo
UI的应用程序类用@EnableOAuth2Sso注释

授权服务器位于模块services/oauth2服务器中。这用@EnableAuthorizationServer注释,并遵循与ui类似的配置模式(在其自己的模块中有一个bootstrap.yml,在配置服务器上有一个yml)。代码执行内存内身份验证,如下所示:

@覆盖
公共无效配置(ClientDetailsServiceConfigurer客户端)引发异常{
clients.inMemory()
.withClient(“用户界面”)
.secret(passwordEncoder.encode(“uisecret”))
.authorizedGrantTypes(“授权代码”、“隐式”、“密码”、“客户端凭据”、“刷新令牌”)
.范围(“ui”)
.重定向URI(
"http://localhost:8084/authtest"
);
}
安全配置如下所示:

@覆盖
受保护的无效配置(HttpSecurity http)引发异常{
http
.requestMatchers()
.antMatchers(“/login”、“/oauth/authorize”、“/oauth/confirm\u access”)
.及()
.授权请求()
.anyRequest().authenticated()
.及()
.formLogin().loginPage(“/login”).permitAll();
}
@凌驾
受保护的无效配置(AuthenticationManagerBuilder auth)引发异常{
认证
.inMemoryAuthentication()
.passwordEncoder(passwordEncoder())
.withUser(“admin”)。密码(passwordEncoder()。编码(“admin”)。角色(“用户”、“管理员”)
.及()
.withUser(“用户”)。密码(passwordEncoder()。编码(“用户”)。角色(“用户”);
}
我很可能没有提供正确的信息,仅仅通过查看我粘贴的片段就能够理解问题,因此查看项目可能是完全理解问题的唯一方法


如果有人能帮我,我将不胜感激。我已经做了将近一个星期了,我觉得我离目标不远了。我正在寻找获得身份验证的最简单方法。

您将重定向uri配置为http://localhost:8084/authtest 但在调用时,您将重定向uri指定为http://localhost:8084/authtest/login 所以它失败了。

您将重定向uri配置为http://localhost:8084/authtest 但在调用时,您将重定向uri指定为http://localhost:8084/authtest/login 所以这是失败的。

我没有时间帮忙,但这里有一些好的视频,可以更好地理解这些概念。您找到解决这个问题的方法了吗?我也有同样的想法。我没有时间帮忙,但这里有一些很好的视频可以让你更好地理解这些概念。你找到解决这个问题的方法了吗?我也一样。