Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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引导安全中OAuth2Client中的SSO_Java_Spring_Spring Boot_Spring Security_Spring Security Oauth2 - Fatal编程技术网

Java Spring引导安全中OAuth2Client中的SSO

Java Spring引导安全中OAuth2Client中的SSO,java,spring,spring-boot,spring-security,spring-security-oauth2,Java,Spring,Spring Boot,Spring Security,Spring Security Oauth2,我一直在阅读有关OAuth2在Spring Security中的集成,以及如何通过第三方身份提供者(如Google)实现身份验证/授权 我使用@enableAuth2sso注释实现了SSO登录,并将以下内容添加到我的应用程序中。属性: security: oauth2: client: clientId: 8d...f5e clientSecret: 2d...1b accessTokenUri: https://sso.domain.com/oa

我一直在阅读有关OAuth2在Spring Security中的集成,以及如何通过第三方身份提供者(如Google)实现身份验证/授权

我使用
@enableAuth2sso
注释实现了SSO登录,并将以下内容添加到我的
应用程序中。属性

security:
  oauth2:
    client:
      clientId: 8d...f5e
      clientSecret: 2d...1b
      accessTokenUri: https://sso.domain.com/oauth/token
      userAuthorizationUri: https://sso.domain.com/oauth/authorize
      scope: openid
    resource:
      userInfoUri: https://sso.domain.com/userinfo
这看起来太神奇了,我不知道引擎盖下发生了什么。按照Spring官方网站上的指南,我看到它切换到了
@enableAuth2Client
,而不是
@enableAuth2sso
,它说:

首先,我们可以注入一个OAuth2ClientContext,并使用它构建一个身份验证过滤器,将其添加到安全配置中

什么是OAuth2Client上下文?我查看了官方网站,它只是说这是一个界面,但仍然不确定它到底是什么以及如何使用

我是遗漏了什么还是官方文件不够?我仍然无法掌握OAuth2ClientContext、OAuth2ClientAuthenticationProcessingFilter和OAuth2RestTemplate如何在Spring中通过SSO一起执行身份验证

请指向任何正确的文档,以便从根本上掌握这一点。提前感谢。

这里有一个准备好运行的。它根据授权服务器对客户端进行身份验证,并从资源服务器访问受保护的资源


我仍在编写源代码文档并完成自述。如果您有问题,请随时问我。

您需要Oauth2客户机示例吗?你找不到关于这个主题的太多文档,一个例子是最好的。@EugenCovaci例子也很好。我的目的是了解在没有神奇注释的情况下,这在内部是如何发生的。有了这些知识,我想在认证之后定制一些方面。我觉得奇怪的是,它没有记录不同的片段是如何工作的。我能找到的最好的是:但它是臃肿的,没有呈现本质。这一个是WebFlux。如果您等到明天,我将为SpringWeb做一个简单的示例。看起来非常有用。我只是对这一点进行了一个高层次的观察,看起来您正在使用
HttpSecurity.oauth2login()
进行客户端实现。在浏览过程中,我注意到它手动创建了一个过滤器以登录到受保护的服务器。如果我理解正确,客户端将调用userinfo端点来加载身份验证对象。如果要自定义此对象,该怎么办?我看到有一些关于
接口的参考,这是否适用于您的解决方案?@int main似乎手动创建过滤器可以让您更好地控制流程。关于PrincipalExtractor接口,我认为没有理由不工作,请随意尝试,下面是一个示例:。关于“call to userinfo endpoint”,实际上它没有调用来加载身份验证对象,它所需要的只是调用的结果作为字符串(我不确定我是否正确理解了您的问题)。您的存储库提供了很大的帮助。我能够通过
HttpSecurity.oauth2Login()
使用您的示例作为参考来实现SSO登录。还有一个问题,这将验证任何拥有SSO服务帐户的人。现在我如何实现特定于应用程序的过滤(检查它们是否具有访问权限)。示例:网站允许您使用谷歌登录,如果您的帐户不存在,它们将通过注册流进行注册。如果是
HttpSecurity.oauth2Login()
,该如何处理。这就是我所关注的
inteface
inteface@int主要的好消息。你说,
网站允许你登录谷歌,如果你的账户不存在,他们会通过注册流程。
。事实上,这并不准确。登录/注册过程完全由授权服务器负责-客户端应用程序不知道用户直接执行登录或首先进行注册。不幸的是,没有现成的注册功能,因此您必须实现一个(通过使用自定义登录页面并在登录表单下方添加指向注册页面的链接)。我可能没有把它放好。我的意思是,尽管网站已经通过第三方提供商登录,但它们确实需要本地数据库中的用户帐户。自从我发表上一篇评论以来,我遇到了一个允许自定义版本的
userService
(类似于
PrincipalExtractor
)。似乎这是处理用户首次访问的方式。