Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
提交反馈
为 GitLab 提交贡献
登录
切换导航
P
pica-cloud-account
项目
项目
详情
动态
版本
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
1
合并请求
1
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
收起侧边栏
Close sidebar
动态
分支图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
com.pica.cloud.account
pica-cloud-account
提交
4bf5277b
提交
4bf5277b
编写于
2月 28, 2020
作者:
Peijun.zhao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
appleLoginfix
上级
8bdb779e
流水线
#22176
已失败 于阶段
in 0 second
变更
2
流水线
1
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
72 行增加
和
28 行删除
+72
-28
AutoCodeController.java
...account/account/server/controller/AutoCodeController.java
+16
-0
LoginServiceImpl.java
...account/account/server/service/impl/LoginServiceImpl.java
+56
-28
未找到文件。
server/src/main/java/com/pica/cloud/account/account/server/controller/AutoCodeController.java
浏览文件 @
4bf5277b
...
...
@@ -71,6 +71,14 @@ public class AutoCodeController extends AccountBaseController {
}
/**
* @Description native获取验证码,新老版本兼容 todo joy
* @Author peijun.zhao
* @Date 2020/2/28 9:55
* @ModifyDate 2020/2/28 9:55
* @Params [entity, req]
* @Return com.pica.cloud.foundation.entity.PicaResponse
*/
@ApiOperation
(
"获取短信验证码,无需图形验证码,如app端"
)
@PostMapping
(
value
=
"/authCode"
)
public
PicaResponse
getAuthCode
(
@RequestBody
EncryptEntity
entity
,
HttpServletRequest
req
)
throws
Exception
{
...
...
@@ -96,6 +104,14 @@ public class AutoCodeController extends AccountBaseController {
}
}
/**
* @Description web获取效验码-老版,记录风控行为 todo joy
* @Author peijun.zhao
* @Date 2020/2/28 9:52
* @ModifyDate 2020/2/28 9:52
* @Params [entity]
* @Return com.pica.cloud.foundation.entity.PicaResponse<java.lang.String>
*/
@ApiOperation
(
"获取短信验证码,需要图形验证码,如H5端和PC端;验证码类型 0默认 1注册 2微信登录绑定手机 3修改手机 4重置密码 5忘记密码 7患者招募提交问卷(效验)"
)
@PostMapping
(
"/account/authCode"
)
public
PicaResponse
<
String
>
getAuthCodeWithCaptcha
(
@RequestBody
EncryptEntity
entity
,
...
...
server/src/main/java/com/pica/cloud/account/account/server/service/impl/LoginServiceImpl.java
浏览文件 @
4bf5277b
...
...
@@ -32,6 +32,7 @@ import com.pica.cloud.foundation.entity.PicaResultCode;
import
com.pica.cloud.foundation.entity.PicaWarnException
;
import
com.pica.cloud.foundation.redis.ICacheClient
;
import
com.pica.cloud.foundation.utils.utils.ValidateUtils
;
import
com.pica.cloud.foundation.utils.utils.json.JsonUtils
;
import
com.pica.cloud.patient.smartcontract.common.utils.HttpClientCloudUtils
;
import
io.jsonwebtoken.*
;
import
org.apache.commons.codec.binary.Base64
;
...
...
@@ -43,7 +44,10 @@ import org.springframework.beans.factory.annotation.Value;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.math.BigInteger
;
import
java.security.KeyFactory
;
import
java.security.PublicKey
;
import
java.security.spec.RSAPublicKeySpec
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Map
;
...
...
@@ -650,50 +654,69 @@ public class LoginServiceImpl implements LoginService {
String
appleResp
=
null
;
try
{
appleResp
=
HttpClientCloudUtils
.
getHttpExecute
(
Constants
.
APPLE_GET_PUBLIC_KEY_URL
);
//
logger.info("checkIdentifyToken-appleResp:{}", appleResp);
logger
.
info
(
"checkIdentifyToken-appleResp:{}"
,
appleResp
);
}
catch
(
Exception
e
)
{
logger
.
info
(
"checkIdentifyToken-get apple public key fail "
+
e
.
getMessage
());
throw
new
PicaException
(
"get apple public key fail Exception"
,
"get apple public key fail"
);
}
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
appleResp
);
String
keys
=
jsonObject
.
getString
(
"keys"
);
JSONArray
arr
=
JSONObject
.
parseArray
(
keys
);
JSONObject
jsonObject1
=
JSONObject
.
parseObject
(
arr
.
getString
(
0
));
logger
.
info
(
"checkIdentifyToken-jsonObject1:{}"
,
jsonObject1
);
JSONObject
appleRespJson
=
JSONObject
.
parseObject
(
appleResp
);
String
keys
=
appleRespJson
.
getString
(
"keys"
);
JSONArray
keysArr
=
JSONObject
.
parseArray
(
keys
);
if
(
identifyToken
.
split
(
"\\."
).
length
<
2
)
{
throw
new
PicaException
(
"get identifyToken fail Exception"
,
"get identifyToken format Exception"
);
}
JSONObject
useAppleAuth
=
new
JSONObject
();
String
inAuth
=
new
String
(
Base64
.
decodeBase64
(
identifyToken
.
split
(
"\\."
)[
0
]));
String
inKid
=
JSONObject
.
parseObject
(
inAuth
).
get
(
"kid"
).
toString
();
for
(
Object
obj
:
keysArr
){
JSONObject
appleAuth
=
JSONObject
.
parseObject
(
obj
.
toString
());
if
(
inKid
.
equals
(
appleAuth
.
getString
(
"kid"
))){
useAppleAuth
=
appleAuth
;
logger
.
info
(
"checkIdentifyToken-jsonObject1:{}"
,
useAppleAuth
);
break
;
}
}
// 通过
架包
生成publicKey
// 通过
jar
生成publicKey
PublicKey
publicKey
;
try
{
Jwk
jwa
=
Jwk
.
fromValues
(
jsonObject1
);
Jwk
jwa
=
Jwk
.
fromValues
(
useAppleAuth
);
publicKey
=
jwa
.
getPublicKey
();
}
catch
(
Exception
e
)
{
logger
.
info
(
"checkIdentifyToken-generate publicKey fail "
+
e
.
getMessage
());
throw
new
PicaException
(
"checkIdentifyToken-generate publicKey fail"
,
"generate publicKey fail"
);
}
// 分割前台传过来的identifyToken(jwt格式的token)用base64解码使用
if
(
identifyToken
.
split
(
"\\."
).
length
>
1
)
{
String
aud
;
String
sub
;
try
{
String
claim
=
new
String
(
Base64
.
decodeBase64
(
identifyToken
.
split
(
"\\."
)[
1
]));
logger
.
info
(
"checkIdentifyToken-claim:{}"
,
claim
);
aud
=
JSONObject
.
parseObject
(
claim
).
get
(
"aud"
).
toString
();
sub
=
JSONObject
.
parseObject
(
claim
).
get
(
"sub"
).
toString
();
// appleUserId从token中解码取出后赋值
request
.
setAppleUserId
(
sub
);
}
catch
(
Exception
e
)
{
logger
.
info
(
"checkIdentifyToken-token decode fail "
+
e
.
getMessage
());
throw
new
PicaException
(
"checkIdentifyToken-token decode fail Exception"
,
"token decode fail"
);
}
return
this
.
verify
(
publicKey
,
identifyToken
,
aud
,
sub
,
request
);
String
aud
;
String
sub
;
try
{
String
claim
=
new
String
(
Base64
.
decodeBase64
(
identifyToken
.
split
(
"\\."
)[
1
]));
logger
.
info
(
"checkIdentifyToken-claim:{}"
,
claim
);
aud
=
JSONObject
.
parseObject
(
claim
).
get
(
"aud"
).
toString
();
sub
=
JSONObject
.
parseObject
(
claim
).
get
(
"sub"
).
toString
();
// appleUserId从token中解码取出后赋值
request
.
setAppleUserId
(
sub
);
}
catch
(
Exception
e
)
{
logger
.
info
(
"checkIdentifyToken-token decode fail "
+
e
.
getMessage
());
throw
new
PicaException
(
"checkIdentifyToken-token decode fail Exception"
,
"token decode fail"
);
}
return
false
;
return
this
.
verify
(
publicKey
,
identifyToken
,
aud
,
sub
,
request
);
// return false;
}
public
static
void
main
(
String
[]
args
)
throws
InvalidPublicKeyException
{
String
jwt
=
"eyJraWQiOiJlWGF1bm1MIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLnl1bnF1ZXlpLkRvY3RvciIsImV4cCI6MTU4Mjc4MjE2NSwiaWF0IjoxNTgyNzgxNTY1LCJzdWIiOiIwMDExMzAuMmI4NzE0NjVmZDFmNDVmZmFmNWRjMjg3ZTQ4OWVlZjEuMDMxNSIsImNfaGFzaCI6Ing1b3lsbXRCdG9XRy02eFVzakRNRUEiLCJlbWFpbCI6IjdnZ2E1cmo1dGNAcHJpdmF0ZXJlbGF5LmFwcGxlaWQuY29tIiwiZW1haWxfdmVyaWZpZWQiOiJ0cnVlIiwiaXNfcHJpdmF0ZV9lbWFpbCI6InRydWUiLCJhdXRoX3RpbWUiOjE1ODI3ODE1NjUsIm5vbmNlX3N1cHBvcnRlZCI6dHJ1ZX0.QKybdVM-1cQBNYeVzYvoQY8rc2ZdRAeq8dJQqbd0zagkmz8X9eoVoKvLxI-cO09bbpRAGMv7Bz-bVcIDgUjIxhxudInmhU2vltfYGEt5meKHjsgKg_qdjyK_WC_bG3N-LhfHUhiA1n3rU0owSxVOWdBxmnYZhftjMd2kGphY-leVPYMoUJRKPteJAMx-F8er1L9nBkrfazoE61Y5GR_y8qtdVFIqlo9oPEGlb1qUC7A4kSGp5OVb4vRvWiqQj7MTjsYIGfqUWQmnkoA7dvlCpbiHdel3Lq6UexS4XzC_FBYC7ekBFU1EO-5rFUflhzmxepPnD8S51eS1CO0ProwwOA"
;
String
jwt
=
"eyJraWQiOiJlWGF1bm1MIiwiYWxnIjoiUlMyNTYifQ."
+
"eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLnl1bnF1ZXlpLkRvY3RvciIsImV4cCI6MTU4Mjc4MjE2NSwiaWF0IjoxNTgyNzgxNTY1LCJzdWIiOiIwMDExMzAuMmI4NzE0NjVmZDFmNDVmZmFmNWRjMjg3ZTQ4OWVlZjEuMDMxNSIsImNfaGFzaCI6Ing1b3lsbXRCdG9XRy02eFVzakRNRUEiLCJlbWFpbCI6IjdnZ2E1cmo1dGNAcHJpdmF0ZXJlbGF5LmFwcGxlaWQuY29tIiwiZW1haWxfdmVyaWZpZWQiOiJ0cnVlIiwiaXNfcHJpdmF0ZV9lbWFpbCI6InRydWUiLCJhdXRoX3RpbWUiOjE1ODI3ODE1NjUsIm5vbmNlX3N1cHBvcnRlZCI6dHJ1ZX0.QKybdVM-1cQBNYeVzYvoQY8rc2ZdRAeq8dJQqbd0zagkmz8X9eoVoKvLxI-cO09bbpRAGMv7Bz-bVcIDgUjIxhxudInmhU2vltfYGEt5meKHjsgKg_qdjyK_WC_bG3N-LhfHUhiA1n3rU0owSxVOWdBxmnYZhftjMd2kGphY-leVPYMoUJRKPteJAMx-F8er1L9nBkrfazoE61Y5GR_y8qtdVFIqlo9oPEGlb1qUC7A4kSGp5OVb4vRvWiqQj7MTjsYIGfqUWQmnkoA7dvlCpbiHdel3Lq6UexS4XzC_FBYC7ekBFU1EO-5rFUflhzmxepPnD8S51eS1CO0ProwwOA"
;
//jwt= "eyJraWQiOiI4NkQ4OEtmIiwiYWxnIjoiUlMyNTYifQ.eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLnl1bnF1ZXlpLkRvY3RvciIsImV4cCI6MTU4Mjc4MDgzMiwiaWF0IjoxNTgyNzgwMjMyLCJzdWIiOiIwMDExMzAuMmI4NzE0NjVmZDFmNDVmZmFmNWRjMjg3ZTQ4OWVlZjEuMDMxNSIsImNfaGFzaCI6Ilg0TzJGQnBQNlJHSm5yTTJaX2toYXciLCJlbWFpbCI6IjdnZ2E1cmo1dGNAcHJpdmF0ZXJlbGF5LmFwcGxlaWQuY29tIiwiZW1haWxfdmVyaWZpZWQiOiJ0cnVlIiwiaXNfcHJpdmF0ZV9lbWFpbCI6InRydWUiLCJhdXRoX3RpbWUiOjE1ODI3ODAyMzIsIm5vbmNlX3N1cHBvcnRlZCI6dHJ1ZX0.fB6Av1KK38U65HbP5XDfNjWyl2i9C9ojHSxAytDKjXHTCaXB2VMHmmnGzEaoSMnS0WR7LilugrmznqOIXkV8i-SyATw-Wx6hWg_9aiBOj-1eeQhUrqZGsWhjklxCFfK0WpAiyNNSAwiklgiZY41P0jrHzNbxk_5WVIxb0sEQ-igLYQhonTeLQ8WuYuCB6iRMlWHxwNdpSNXb-IlzjEKNm1cozf8RRjg0Y00Hu2VPEai2NJzGx5Ro7x7OpvCfePjxlyJze0tSYDVWxBnklBvHGDHXuTqKqMwNNHzo53JIiSARQD7JHxNCgtNTVIYX075zHNn8UgiLZy1mEdf1KnoXHg";
// jwt= "eyJraWQiOiI4NkQ4OEtmIiwiYWxnIjoiUlMyNTYifQ." +
// "eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLnl1bnF1ZXlpLkRvY3RvciIsImV4cCI6MTU4Mjc4MDgzMiwiaWF0IjoxNTgyNzgwMjMyLCJzdWIiOiIwMDExMzAuMmI4NzE0NjVmZDFmNDVmZmFmNWRjMjg3ZTQ4OWVlZjEuMDMxNSIsImNfaGFzaCI6Ilg0TzJGQnBQNlJHSm5yTTJaX2toYXciLCJlbWFpbCI6IjdnZ2E1cmo1dGNAcHJpdmF0ZXJlbGF5LmFwcGxlaWQuY29tIiwiZW1haWxfdmVyaWZpZWQiOiJ0cnVlIiwiaXNfcHJpdmF0ZV9lbWFpbCI6InRydWUiLCJhdXRoX3RpbWUiOjE1ODI3ODAyMzIsIm5vbmNlX3N1cHBvcnRlZCI6dHJ1ZX0." +
// "fB6Av1KK38U65HbP5XDfNjWyl2i9C9ojHSxAytDKjXHTCaXB2VMHmmnGzEaoSMnS0WR7LilugrmznqOIXkV8i-SyATw-Wx6hWg_9aiBOj-1eeQhUrqZGsWhjklxCFfK0WpAiyNNSAwiklgiZY41P0jrHzNbxk_5WVIxb0sEQ-igLYQhonTeLQ8WuYuCB6iRMlWHxwNdpSNXb-IlzjEKNm1cozf8RRjg0Y00Hu2VPEai2NJzGx5Ro7x7OpvCfePjxlyJze0tSYDVWxBnklBvHGDHXuTqKqMwNNHzo53JIiSARQD7JHxNCgtNTVIYX075zHNn8UgiLZy1mEdf1KnoXHg";
jwt
=
"eyJraWQiOiJlWGF1bm1MIiwiYWxnIjoiUlMyNTYifQ."
+
"eyJpc3MiOiJodHRwczovL2FwcGxlaWQuYXBwbGUuY29tIiwiYXVkIjoiY29tLnl1bnF1ZXlpLkRvY3RvciIsImV4cCI6MTU4Mjg3MTkwNSwiaWF0IjoxNTgyODcxMzA1LCJzdWIiOiIwMDExMzAuMmI4NzE0NjVmZDFmNDVmZmFmNWRjMjg3ZTQ4OWVlZjEuMDMxNSIsImNfaGFzaCI6IkliX3VSOWdnZEdVRi1jbzZWZGdfTHciLCJlbWFpbCI6IjdnZ2E1cmo1dGNAcHJpdmF0ZXJlbGF5LmFwcGxlaWQuY29tIiwiZW1haWxfdmVyaWZpZWQiOiJ0cnVlIiwiaXNfcHJpdmF0ZV9lbWFpbCI6InRydWUiLCJhdXRoX3RpbWUiOjE1ODI4NzEzMDUsIm5vbmNlX3N1cHBvcnRlZCI6dHJ1ZX0."
+
"Mek6XzKKUenVQU3IHmLM_tgtilCbsIUSFu1r2gIHsNqseVZYC6JpkQJEZ2SSIwjRPSNUqtK6wqG4s5QbY9qJfIVdVMPqI95eaJiPWKOM6RTlatEhyLs4mokgSutsFHF97nW1qXGidN4tfXaxYygfaoYvOvjeGM-sfUixUbu3fhc5PKH2N91LnVcJNDmqDiUamzOYIXDzn55us8bjCm02fHOQ9D12HY9ambZ_zmPJXAMRi_YoqnSGAhggLfqKJ32pcB2ATHumgDOEhRsuXM89M6pHRS-yzaTfV182prd-fYWdscPVMiEqDt8JXb811lzY8wfqYZxtyg1sEdkq0Hrugw"
;
// 向苹果后台获取公钥参数
String
appleResp
=
null
;
...
...
@@ -706,12 +729,17 @@ public class LoginServiceImpl implements LoginService {
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
appleResp
);
String
keys
=
jsonObject
.
getString
(
"keys"
);
JSONArray
arr
=
JSONObject
.
parseArray
(
keys
);
JSONObject
jsonObject1
=
JSONObject
.
parseObject
(
arr
.
getString
(
0
));
// JSONObject jsonObject1 = JSONObject.parseObject(arr.getString(0));
JSONObject
jsonObject1
=
JSONObject
.
parseObject
(
arr
.
getString
(
1
));
System
.
out
.
println
(
"jsonObject1:"
+
jsonObject1
);
Jwk
jwa
=
Jwk
.
fromValues
(
jsonObject1
);
PublicKey
publicKey
=
jwa
.
getPublicKey
();
//added by joy begin
// publicKey = getPublicKey();
//added by joy end
String
audience
=
"com.yunqueyi.Doctor"
;
String
subject
=
"001130.2b871465fd1f45ffaf5dc287e489eef1.0315"
;
JwtParser
jwtParser
=
Jwts
.
parser
().
setSigningKey
(
publicKey
);
...
...
@@ -729,7 +757,7 @@ public class LoginServiceImpl implements LoginService {
}
}
catch
(
ExpiredJwtException
e
)
{
System
.
out
.
println
(
"checkIdentifyToken-apple token expired"
+
e
.
getMessage
());
throw
new
PicaException
(
"apple token expired Exception"
,
e
.
getMessage
());
throw
new
PicaException
(
"apple token expired Exception
{}
"
,
e
.
getMessage
());
}
catch
(
Exception
e
)
{
System
.
out
.
println
(
"checkIdentifyToken-apple token illegal"
+
e
.
getMessage
());
throw
new
PicaException
(
"apple token illegal Exception"
,
e
.
getMessage
());
...
...
写
预览
Markdown
格式
0%
请重试
or
附加一个文件
附加文件
取消
您添加了
0
人
到此讨论。请谨慎行事。
先完成此消息的编辑!
取消
想要评论请
注册
或
登录