📜  使用 Spring 和 Github 进行 OAuth2 身份验证

📅  最后修改于: 2022-05-13 01:55:12.472000             🧑  作者: Mango

使用 Spring 和 Github 进行 OAuth2 身份验证

开放授权或 OAuth 是用于授权的行业级协议。它允许第三方服务交换您的信息,而无需用户提供密码。这是可能的,因为它使用授权令牌来证明消费者和服务提供者之间的身份。 OAuth2 是对 OAuth 的升级,它本身灌输了更多的安全性。但在继续之前,让我们详细了解 OAuth 的工作和使用。

例子 -

假设我们有一个服务“A”和“B”。用户 U 正在使用服务“A”和“B”,因此它可以与这两个服务进行通信。现在,如果服务“A”想要访问服务“B”的内容,那么我们需要第三方干预者来验证服务“A”是安全的并且可以访问服务“B”。这种干预是由用户自己完成的。

从开发人员的角度来说,假设我们正在构建一个应用程序 X。我们已经知道用户使用安全可靠的平台,如 Facebook、Instagram、Github 等。因此,我们没有构建自己的登录和登录服务,而是构建自己的登录和登录服务。可以使用 Facebook 的服务让用户登录到我们的应用程序。

当我们的应用程序提示 Facebook 服务器时,服务器会返回一个密钥,我们使用该密钥来验证用户的真实性,每次他/她尝试登录我们的平台时。 OAuth 的整个想法基本上是基于这样一个事实,即第三方应用程序是安全可靠的,我们信任他们的服务。

如何在项目中使用 OAuth2:

现在 Spring 作为框架通过其各种 Maven 和 Gradle 依赖项向开发人员提供 OAuth 功能。要在您的项目中使用 OAuth2,请按照以下步骤操作:-

  1. 使用 spring web、spring-security 依赖和 oauth2 自动配置依赖创建一个新项目(Spring Starter)。
  2. 前往默认课程。添加注释@EnableOAuth2Sso 。这允许我们在我们的应用程序中启用 Oauth。
  3. 现在,当进行 Oauth 调用时,我们需要告诉客户端(这是一个服务,这里是 Github)查看某个地方,以便知道可以使用哪些应用程序进行 OAuth 调用。因此,我们配置我们的“应用程序”。属性”文件到“applications.yml”。
  4. 我们还需要应用程序的各种权限才能在我们的应用程序中使用它们的安全性。在这里,当我们使用 Github 时,请前往此页面。
  5. 选择“New OAuth App” ,然后会出现“Register a new OAuth application”页面。输入应用程序名称和说明。然后,输入您的应用程序的主页,在本例中应为 http://localhost:8080。最后,指明Authorization callback URL,基本上是路径的URL,用户通过GitHub认证后应该登陆。
  6. 现在,我们创建的应用程序将为我们提供客户端 ID客户端密码。复制这些字段。
  7. 现在,回到您的 Spring 应用程序并打开 applications.yml。这个文件需要修改如下。将数据复制到 yml 文件中,就可以使用了。

让我们看看下面给出的applications.yml如下。  

Security:
 oauth2:
    client:
           clientId: your-id
           clientSecret: your-secret
           accessTokenUri: https://github.com/login/oauth/access_token
           userAuthorizationUri: https://github.com/login/oauth/authorize
           clientAuthenticationScheme: form
      resource:
          user-info-uri: https://api.github.com/user
                     prefer-token-info: false

Applications.yml 文件说明:

  • 以上发布的所有信息均由 Github 授权用于识别详细信息。如果我们希望将其用于任何其他目的,我们可以将“prefer-token-info”设为true
  • ClienAuthenticationScheme 在这里设置为表单,就像在这个例子中一样,因为 Github 将使用表单来输入所有用户详细信息。而且,以上所有细节都是Github内部使用的,我们也不必担心。

注意 —由于应用程序文件是 yml 文件,因此代码必须按上述方式构建。

此外,当我们在 localhost 上运行上述应用程序时,我们将显示一些文本以查看我们的 OAuth 是否正常工作,因此我们构建了一个简单的 API 并添加:-

Java
@SpringBootApplication
@EnableOAuth2Sso
@RestController
  
// Main class name DemoApplication
public class DemoApplication {
   
    // API
    @GetMapping("/")
    public String message(Principal principal) {
        return "hi "+principal.getName();
    }
      
    public static void main(String[] args) {
          
        // DemoApplication is the default class.
        SpringApplication.run(DemoApplication.class, args);
    }
  
}


程序说明:

  • DemoApplication 是默认类。
  • 当 Github 身份验证成功通过时,主体对象将接收用户详细信息并显示“hi”用户名。

现在运行您的 Spring 应用程序并打开 localhost 8080 并亲自查看 GitHub 身份验证工作!。