xuexb / Web Oauth App
Licence: mit
第三方登录服务 Web OAuth 示例
Stars: ✭ 30
Programming Languages
javascript
184084 projects - #8 most used programming language
Projects that are alternatives of or similar to Web Oauth App
Socialite
Socialite is an OAuth2 Authentication tool. It is inspired by laravel/socialite, you can easily use it without Laravel.
Stars: ✭ 1,026 (+3320%)
Mutual labels: baidu, qq, oauth2, weibo
OAuthLogin.AspNetCore
第三方平台联合登陆(facebook、微信、微博、QQ、Kakao)
Stars: ✭ 43 (+43.33%)
Mutual labels: oauth2, weibo, qq
L Passport
Koa middleware and api sdk for wechat oauth, qq oauth, baidu oauth and weibo oauth
Stars: ✭ 52 (+73.33%)
Mutual labels: baidu, qq, weibo
a-soul
Full-featured social media monitor that extracts data from a variety of services and pushes updates to Telegram or other platforms
Stars: ✭ 39 (+30%)
Mutual labels: weibo, qq
Simpler
Simpler是一款轻量级的第三方微博应用,具有微博的基础功能,兼有外观优雅,运行流畅,内存占用低,省电省流量等特点。
Stars: ✭ 27 (-10%)
Mutual labels: oauth2, weibo
humhub-oauth
Social OAuths built for the Social Platform HumHub
Stars: ✭ 16 (-46.67%)
Mutual labels: oauth2, qq
LoginSharePay
LoginSharePay集成QQ,微博,微信的登录和分享,包括微信支付。它配置简单,使用方便,且能够快速运用到应用中,为开发者节省了大量时间。
Stars: ✭ 62 (+106.67%)
Mutual labels: weibo, qq
YHThirdManager
一个快速、简单、易集成、扩展性好的社交化组件。摒弃友盟等三方库,使用原生SDK。支持微信支付、微信分享、微信登录、微信授权、QQ授权、QQ分享、QQ登录、新浪授权、新浪登录、新浪分享、微博评论、微博获取、支付宝支付。极大的减小了包体积;同时加入了自动管理提示框的功能
Stars: ✭ 41 (+36.67%)
Mutual labels: weibo, qq
jeesuite-passport
Jeesuite-passport是面向企业级单点登录、统一认证的一站式解决方案。支持微信、企业微信、主流开放平台OAuth、Oauth2.0,JWT、SAML2.0多种认证集成模式。
Stars: ✭ 108 (+260%)
Mutual labels: oauth2, passport
SocialLibrary
微博分享、微信分享、qq分享,微信支付、支付宝支付 qq登录、微信登录、支付宝登录,直接引用官方提供api 安全省心
Stars: ✭ 61 (+103.33%)
Mutual labels: weibo, qq
passport-qq
QQ connection authentication strategy for Passport and Node.js
Stars: ✭ 33 (+10%)
Mutual labels: passport, qq
Sns auth
通用第三方登录SDK,支持微信,微信扫码,QQ,微博登录,支付宝登录,Facebook,Line,Twitter,Google
Stars: ✭ 520 (+1633.33%)
Mutual labels: qq, oauth2
Lumen Passport
Making Laravel Passport work with Lumen
Stars: ✭ 585 (+1850%)
Mutual labels: oauth2, passport
Decryptlogin
APIs for loginning some websites by using requests.
Stars: ✭ 1,861 (+6103.33%)
Mutual labels: baidu, weibo
LeXun.Security.OAuth
用于 Asp.Net 和 Asp.Net Core 的OAuth2社交身份验证提供程序。支持支付宝,QQ,微信,百度等第三方登录
Stars: ✭ 19 (-36.67%)
Mutual labels: baidu, qq
第三方登录服务 Web OAuth 示例
声明
该项目只是用户走通整个第三方的流程,并写出对应的思路,代码不提供参考价值,因为太渣!
使用技术
- 后端基于 Node.js v7.8+ + ThinkJS v3
- 数据库基于 MySQL
- 前端样式基于 Bootstrap v4
- 代码托管于 [email protected]/web-oauth-app
- 示例链接 https://xuexb.com/web-oauth-app
数据库
请注意修改
src/config/adapter.js
中 MySQL 数据库配置。
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for `oauth`
-- ----------------------------
DROP TABLE IF EXISTS `oauth`;
CREATE TABLE `oauth` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` char(50) NOT NULL COMMENT '类型,有 qq、github、weibo',
`uid` varchar(255) NOT NULL COMMENT '唯一标识',
`info` varchar(255) DEFAULT '' COMMENT '其他信息,JSON 形式',
`user_id` int(11) NOT NULL COMMENT '用户ID',
`create_time` bigint(13) NOT NULL COMMENT '创建时间',
`name` varchar(255) DEFAULT NULL COMMENT '显示名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`username` varchar(255) NOT NULL COMMENT '用户名',
`password` varchar(255) NOT NULL COMMENT '密码',
`create_time` bigint(13) NOT NULL COMMENT '创建时间',
`update_time` bigint(13) NOT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4;
SET FOREIGN_KEY_CHECKS = 1;
第三方登录说明
- 每个用户必须拥有自己的用户名和密码。
- 每个用户可以绑定不同的第三方帐户系统。
- 用户可以对第三方绑定进行管理。
- 用户可以通过已绑定的任意第三方帐户系统进行登录。
- 用户授权表中需要存放第三方系统的唯一标识、显示名称,唯一标识用来和用户、第三方系统进行关联。
- 基于 oAuth2.0 进行授权认证。
- 第三方登录回调成功后,判断当前是否登录:
- 已登录,刷新绑定信息。
- 未登录,记录授权信息,在登录、注册成功后绑定信息。
当然你可以根据自己实际项目需求修改,比如:
- 第三方登录后判断当前是否已登录,如果已登录且绑定的对应平台不是当前帐号,则提示是否更新绑定,或者登录失败
- 第三方登录后判断是否绑定过,如果没有绑定过则自动生成一个用户自动绑定
- 一个帐户只允许绑定一个第三方平台
- 等等
GitHub
- 跳转到授权页
https://github.com/login/oauth/authorize?
- 认证通过后自动跳转到回调地址,并携带
code
- 使用
code
请求https://github.com/login/oauth/access_token
来获取access_token
,有个小坑是,在想使用 JSON 返回值时,需要在请求头里添加'Accept': 'application/json'
- 使用
access_token
请求https://api.github.com/
获取用户信息:-
id
- 唯一标识 -
name
- 显示名称 -
avatar_url
- 用户头像
-
参考链接:https://developer.github.com/apps/building-oauth-apps/authorization-options-for-oauth-apps/
- 跳转到授权页
https://graph.qq.com/oauth2.0/show?which=Login&display=
,需要区分下 PC 端和移动端传,参数display
不一样,需要单独处理下 - 认证通过后自动跳转到参数
redirect_uri
中,并携带code
- 使用
code
请求https://graph.qq.com/oauth2.0/token?
获取access_token
,有个大坑是成功时返回access_token=xxx
,错误时返回callback( {code: xxx} )
,好尴尬。。。 - 使用
access_token
请求https://graph.qq.com/oauth2.0/me?
获取openid
,而这里又是返回个callback({"openid": "1"})
- 使用
access_token
和openid
请求https://graph.qq.com/user/get_user_info
来获取用户信息,最终为:-
openid
- 唯一标识 -
nickname
- 显示名称 -
figureurl_qq_2
- 用户头像
-
参数链接:http://wiki.connect.qq.com/开发攻略_server-side
微博
- 跳转到授权页
https://api.weibo.com/oauth2/authorize
- 认证通过后自动跳转到参数
redirect_uri
中,并携带code
- 使用
code
请求https://api.weibo.com/oauth2/access_token?
获取access_token
- 使用
access_token
请求https://api.weibo.com/2/users/show.json
获取用户信息,最终为:-
access_token
- 唯一标识 -
screen_name
- 显示名称 -
avatar_hd
- 用户头像
-
参考链接:http://open.weibo.com/wiki/授权机制说明
百度
- 跳转到授权页面
http://openapi.baidu.com/oauth/2.0/authorize?
,需要区分下 PC 端和移动端传,参数display
不一样,需要单独处理下 - 认证通过后自动跳转到参数
redirect_uri
中,并携带code
- 使用
code
请求https://openapi.baidu.com/oauth/2.0/token
获取access_token
- 使用
access_token
请求https://openapi.baidu.com/rest/2.0/passport/users/getInfo
来获取用户信息,最终为:-
userid
- 唯一标识 -
username
- 显示名称 -
http://tb.himg.baidu.com/sys/portrait/item/${userinfo.portrait}
- 用户头像
-
参考链接:http://developer.baidu.com/wiki/index.php?title=docs/oauth/application
隐私声明
- 本项目只是演示示例,登录、注册的密码通过 MD5 加密后存储于 MySQL 中。
- 第三方登录相关信息不会对外暴露。
- 所有数据不定期的进行删除。
本地开发
# 导入 MySQL 数据
...
# 申请第三方开发平台
...
# 克隆代码
git clone https://github.com/xuexb/web-oauth-app.git && cd web-oauth-app
# 修改数据库配置
vi src/config/adapter.js
# 修改配置信息
vi src/config/config.js
# 安装依赖
yarn install
# 本地开发
yarn start
Docker 运行
# 构建
docker build --no-cache -t demo/web-oauth-app:latest .
# 运行
docker run \
-p 8080:8080 \
-d \
--name web-oauth-app \
--env DOCKER_MYSQL_USER=root \
--env DOCKER_MYSQL_PASSWORD=123456 \
--env DOCKER_MYSQL_DATABASE=app \
--env DOCKER_MYSQL_HOST=locaclhost \
--env DOCKER_MYSQL_PORT=3306 \
demo/web-oauth-app:latest
License
MIT
Note that the project description data, including the texts, logos, images, and/or trademarks,
for each open source project belongs to its rightful owner.
If you wish to add or remove any projects, please contact us at [email protected].