forked from justauth/JustAuth
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
149 additions
and
82 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
104 changes: 104 additions & 0 deletions
104
src/main/java/me/zhyd/oauth/request/AbstractAuthDingtalkRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
package me.zhyd.oauth.request; | ||
|
||
import com.alibaba.fastjson.JSON; | ||
import com.alibaba.fastjson.JSONObject; | ||
import me.zhyd.oauth.cache.AuthStateCache; | ||
import me.zhyd.oauth.config.AuthConfig; | ||
import me.zhyd.oauth.config.AuthSource; | ||
import me.zhyd.oauth.enums.AuthUserGender; | ||
import me.zhyd.oauth.exception.AuthException; | ||
import me.zhyd.oauth.model.AuthCallback; | ||
import me.zhyd.oauth.model.AuthToken; | ||
import me.zhyd.oauth.model.AuthUser; | ||
import me.zhyd.oauth.utils.GlobalAuthUtils; | ||
import me.zhyd.oauth.utils.HttpUtils; | ||
import me.zhyd.oauth.utils.UrlBuilder; | ||
|
||
/** | ||
* <p> | ||
* 钉钉登录抽象类,负责处理使用钉钉账号登录第三方网站和扫码登录第三方网站两种钉钉的登录方式 | ||
* </p> | ||
* | ||
* @author yadong.zhang (yadong.zhang0415(a)gmail.com) | ||
* @since 1.16.0 | ||
*/ | ||
public abstract class AbstractAuthDingtalkRequest extends AuthDefaultRequest { | ||
|
||
public AbstractAuthDingtalkRequest(AuthConfig config, AuthSource source) { | ||
super(config, source); | ||
} | ||
|
||
|
||
public AbstractAuthDingtalkRequest(AuthConfig config, AuthSource source, AuthStateCache authStateCache) { | ||
super(config, source, authStateCache); | ||
} | ||
|
||
@Override | ||
protected AuthToken getAccessToken(AuthCallback authCallback) { | ||
return AuthToken.builder().accessCode(authCallback.getCode()).build(); | ||
} | ||
|
||
@Override | ||
protected AuthUser getUserInfo(AuthToken authToken) { | ||
String code = authToken.getAccessCode(); | ||
JSONObject param = new JSONObject(); | ||
param.put("tmp_auth_code", code); | ||
String response = new HttpUtils(config.getHttpConfig()).post(userInfoUrl(authToken), param.toJSONString()); | ||
JSONObject object = JSON.parseObject(response); | ||
if (object.getIntValue("errcode") != 0) { | ||
throw new AuthException(object.getString("errmsg")); | ||
} | ||
object = object.getJSONObject("user_info"); | ||
AuthToken token = AuthToken.builder() | ||
.openId(object.getString("openid")) | ||
.unionId(object.getString("unionid")) | ||
.build(); | ||
return AuthUser.builder() | ||
.rawUserInfo(object) | ||
.uuid(object.getString("unionid")) | ||
.nickname(object.getString("nick")) | ||
.username(object.getString("nick")) | ||
.gender(AuthUserGender.UNKNOWN) | ||
.source(source.toString()) | ||
.token(token) | ||
.build(); | ||
} | ||
|
||
/** | ||
* 返回带{@code state}参数的授权url,授权回调时会带上这个{@code state} | ||
* | ||
* @param state state 验证授权流程的参数,可以防止csrf | ||
* @return 返回授权地址 | ||
* @since 1.9.3 | ||
*/ | ||
@Override | ||
public String authorize(String state) { | ||
return UrlBuilder.fromBaseUrl(source.authorize()) | ||
.queryParam("response_type", "code") | ||
.queryParam("appid", config.getClientId()) | ||
.queryParam("scope", "snsapi_login") | ||
.queryParam("redirect_uri", config.getRedirectUri()) | ||
.queryParam("state", getRealState(state)) | ||
.build(); | ||
} | ||
|
||
/** | ||
* 返回获取userInfo的url | ||
* | ||
* @param authToken 用户授权后的token | ||
* @return 返回获取userInfo的url | ||
*/ | ||
@Override | ||
protected String userInfoUrl(AuthToken authToken) { | ||
// 根据timestamp, appSecret计算签名值 | ||
String timestamp = System.currentTimeMillis() + ""; | ||
String urlEncodeSignature = GlobalAuthUtils.generateDingTalkSignature(config.getClientSecret(), timestamp); | ||
|
||
return UrlBuilder.fromBaseUrl(source.userInfo()) | ||
.queryParam("signature", urlEncodeSignature) | ||
.queryParam("timestamp", timestamp) | ||
.queryParam("accessKey", config.getClientId()) | ||
.build(); | ||
} | ||
|
||
} |
22 changes: 22 additions & 0 deletions
22
src/main/java/me/zhyd/oauth/request/AuthDingTalkAccountRequest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package me.zhyd.oauth.request; | ||
|
||
import me.zhyd.oauth.cache.AuthStateCache; | ||
import me.zhyd.oauth.config.AuthConfig; | ||
import me.zhyd.oauth.config.AuthDefaultSource; | ||
|
||
/** | ||
* 钉钉账号登录 | ||
* | ||
* @author yadong.zhang (yadong.zhang0415(a)gmail.com) | ||
* @since 1.0.0 | ||
*/ | ||
public class AuthDingTalkAccountRequest extends AbstractAuthDingtalkRequest { | ||
|
||
public AuthDingTalkAccountRequest(AuthConfig config) { | ||
super(config, AuthDefaultSource.DINGTALK_ACCOUNT); | ||
} | ||
|
||
public AuthDingTalkAccountRequest(AuthConfig config, AuthStateCache authStateCache) { | ||
super(config, AuthDefaultSource.DINGTALK_ACCOUNT, authStateCache); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters