资格申请
在钉钉平台申请称为开发者,并创建相关的应用(小程序或者网页Web应用)
配置回调
扫码登录其实也是OAuth2
登录的一种,因此要对回调的地址进行配置,从而拿到钉钉发配给我们的授权码,从而去获取用户的信息
实现
共有两种方式实现钉钉扫码登录
直接使用钉钉提供的扫码登录页面
https://oapi.dingtalk.com/connect/qrconnect?appid=SuiteKey&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=REDIRECT_URI
其中:
SuiteKey
为应用的AppKey
REDIRECT_URI
为应用的重定向地址(必须和应用配置的地址相同,否则会提示无权限访问)
获取用户信息
根据sns临时授权码获取用户信息 - 钉钉开放平台
获取基本信息的接口:[https://oapi.dingtalk.com/sns/getuserinfo_bycode](https://oapi.dingtalk.com/sns/getuserinfo_bycode)
请求参数
响应
签名计算方法
@Component
public class SignatureUtil {
public String makeDingSignature(String timestamp, String secret) throws NoSuchAlgorithmException, InvalidKeyException, UnsupportedEncodingException {
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
byte[] signatureBytes = mac.doFinal(timestamp.getBytes(StandardCharsets.UTF_8));
String signature = new String(Base64.encodeBase64(signatureBytes));
if ("".equals(signature)) {
return "";
}
String encoded = URLEncoder.encode(signature, "UTF-8");
String urlEncodeSignature = encoded.replace("+", "%20").replace("*", "%2A").replace("~", "%7E").replace("/", "%2F");
return urlEncodeSignature;
}
}