web-oauth-app
web-oauth-app copied to clipboard
第三方登录服务 Web OAuth 示例
ç¬¬ä¸æ¹ç»å½æå¡ Web OAuth 示ä¾
声æ
该项ç®åªæ¯ç¨æ·èµ°éæ´ä¸ªç¬¬ä¸æ¹çæµç¨ï¼å¹¶ååºå¯¹åºçæè·¯ï¼ä»£ç 䏿ä¾åèä»·å¼ã
ä½¿ç¨ææ¯
- å端åºäº Node.js v7.8+ + ThinkJS v3
- æ°æ®åºåºäº MySQL
- åç«¯æ ·å¼åºäº Bootstrap v4
- ä»£ç æç®¡äº GitHub@xuexb/web-oauth-app
- 示ä¾é¾æ¥ https://web-oauth-app.xuexb.com
æ°æ®åº
请注æä¿®æ¹
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 MYSQL_USER=root \
--env MYSQL_PASSWORD=123456 \
--env MYSQL_DATABASE=app \
--env MYSQL_HOST=locaclhost \
--env MYSQL_PORT=3306 \
--env OAUTH_GITHUB_CLIENT_ID= \
--env OAUTH_... \
demo/web-oauth-app:latest
# é
ç½®æä»¶å¼è¿è¡
docker run \
-p 8080:8080 \
-d \
--name web-oauth-app \
-v "$(pwd)/config.js":/usr/src/app/src/config/config.js \
-v "$(pwd)/adapter.js":/usr/src/app/src/config/adapter.js \
demo/web-oauth-app:latest
License
MIT