前言
本文将介绍如何访问基于OAuth2
协议的GitHub
用户信息API
接口以及如何自己实现一个简单的基于授权码模式的认证服务器,如果对OAuth2
的基本概念和四种授权模式还不熟悉,可以先看一下阮一峰老师的博客:OAuth 2.0 的一个简单解释,本文则主要以实际的demo
来讲解使用方法。本文所展示示例的完整代码已上传到GitHub。
GitHub 第三方登录
前置准备
在访问Github
的API
接口之前,需要先访问https://github.com/settings/applications/new
,然后填写以下的内容:
这里除了最后一项Authorization callback URL
,其它内容对后续的代码处理都没有影响(用于用户点击第三方登录时展示网站的信息),而最后一项则是用于接收临时授权码code
来换取Access Token
的回调地址,即对应下图中的D
和E
,下图来自https://datatracker.ietf.org/doc/html/rfc6749#section-4.1
。
1 | sql复制代码 +----------+ |
在填完以上信息后,就会跳转到以下界面:
这里需要将Client ID
以及点击Generate a new client secret
后生成的Client Secret
进行保存用于后续使用。
编码
完成以上的准备步骤后就可以开始编码工作了,首先为了后续使用和修改方便,可以先将Client ID
和Client Secret
在配置文件中进行配置(为了减少篇幅,只展示部分核心代码):
1 | yaml复制代码server: |
然后编写对应的实体GithubAuth
:
1 | java复制代码/** |
然后编写GitHub
的认证接口服务类:
1 | java复制代码/** |
以及获取用户信息的接口服务类:
1 | java复制代码/** |
然后是处理临时授权码code
的接口(这里的接口地址即对应上文中填写的回调地址):
1 | java复制代码/** |
而前端只需要在登录首页放置对应的GitHub
图标并设置点击事件:
1 | javascript复制代码githubAuthorize() { |
并且在重定向界面进行以下跳转处理:
1 | javascript复制代码created() { |
以上便是项目的核心配置,最终效果如下:
自己实现 OAuth2 认证服务器
前置准备
本文采用了数据库存储的方式用来保存客户端的信息,因此首先需要执行以下SQL
脚本创建对应的表:
1 | sql复制代码-- ---------------------------- |
编码
首先是yaml
配置:
1 | yaml复制代码server: |
然后是认证服务器的配置:
1 | java复制代码/** |
然后是自定义的用户权限信息,在这里可以设置token
中保存的用户和权限相关信息:
1 | java复制代码/** |
然后是Web
安全相关的配置:
1 | java复制代码/** |
以上便是授权服务器全部的配置,下面展示资源服务器相关的配置,这里仍然采取将授权和资源服务器分开的方式进行配置,并且采用的仍然是老版本的配置方法:
1 | java复制代码/** |
然后创建一个返回用户信息的接口:
1 | java复制代码/** |
yaml
的配置如下,这里的http://localhost:9002
需要修改为自己授权服务器的地址:
1 | yaml复制代码server: |
完成以上的配置后便可以参考GitHub
中步骤来编写客户端的后端代码:
首先是yaml
的配置:
1 | yaml复制代码server: |
然后创建对应的实体:
1 | java复制代码/** |
然后编写对应的认证及获取用户信息的接口服务类:
1 | java复制代码/** |
1 | java复制代码/** |
然后编写处理临时授权码code
的回调接口:
1 | java复制代码/** |
然后在前端同样添加对应图标的点击事件:
1 | javascript复制代码oauth2Authorize() { |
重定向界面的跳转处理仍然不变:
1 | javascript复制代码created() { |
最终的效果如下:
总结
本文简单讲解了如果访问GitHub
的第三方登录接口以及实现一个简单的认证服务器,在后续文章中会讲解如何自定义认证服务器的登录和确认界面以及增加自定义的认证方式。
本文转载自: 掘金