极光一键登录 Java后端处理笔记

最近项目使用了极光的一键登录,后端使用的Java,Springboot

前端请求完成后会获得loginToken,再由后端换取加密后的手机号

String requestBody = "{\"loginToken\": \""+token+"\"}";
String request = HttpTools.post("https://api.verification.jpush.cn/v1/web/loginTokenVerify",requestBody,appkey,masterSecret);

我封装了一个post请求的方法,极光一键登录需要用到Basic认证

/**
     * 发送POST请求
     * @param url 请求的URL
     * @param param 请求的参数
     * @param appkey 应用key
     * @param ms 应用secret
     * @return 响应结果
     * @throws Exception 异常
     */
    public static String post(String url, String param, String appkey, String ms) throws Exception {
        String result = HttpRequest.post(url).
                header("Authorization", "Basic " + Base64.encodeBase64String((appkey + ":" + ms).getBytes())).
                header("Content-Type", "application/json; charset=UTF-8").
                body(param).
                execute().body();
        return result;
    }

这里我直接返回JsonString然后再进行处理

JSONObject jsonObject = new JSONObject(request);
if ((int)(jsonObject.getInt("code")) == 8000) {
    return RSADecrypt.decrypt(jsonObject.getStr("phone"));
} else {
    return null;
}

接下来就要使用私钥进行解密操作,因为是RSA编码,不能出现其他特殊符号,所以先进行了编码处理。处理后会出现+全部变成空格的情况,再重新替换回来。

特别注意:私钥不需要头尾标注,不能有换行符

    /**
     * 解密加密后的字符串
     * @param cryptograph 加密后的字符串
     * @return 解密后的字符串
     * @throws Exception
     */
    public static String decrypt(String cryptograph) throws Exception {
        cryptograph = URLDecoder.decode(cryptograph, "UTF-8");
        cryptograph = cryptograph.replace(" ", "+");
        String prikey =
                "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMrLBjPk5Zxxxxxx" +
                "qglD4ONZtPGH7KxRBZZR4NATmJ/2uTpTMUg58jWOIry+MPsqHcA8yxmmCCxxxxxx" +
                "RfBdALjZ/YMbj/apkZXXhypU6rsSqbuJs/X9eVIrlqqXSO2bH3LWOoKHZoxxxxxx" +
                "4ZNx6QNAfOHImZyftN+TYMiHv1QtAgMBAAECgYEAw9ZGWi0NVaq5hsoopKxxxxxx" +
                "CZvjAhGIXL8bZLXX6XrBK8MVT5OuBOwLPcxJzvPAIVpUJKPDKwJRc58aE2xxxxxx" +
                "cAlLHCH78K+glU7DwozyDzrrPGITdcJODHwVYXctLhLRb8YBifGk2LBNtAxxxxxx" +
                "FmM8YXXfu4hXxnFY9P0CQQD1sStfZjto4EYac+jrZSAkXGL+C4eyEbcBcmxxxxxx" +
                "jzBmlG39Bef5Ijf07W/jY5e5cB8fIOc4TOXqFyeF6ovzAkEA000aOH/ubtxxxxxx" +
                "sn8PKMX1BBLlejODFP7VWrooVh+ipRvORByT1ap/eCYrVHdtOsdR7q5rI0xxxxxx" +
                "xcdHXwJALZcnpjcxNP/Q4l25zdxg/35JPDzlfCx/WfxiUqNYb990KsTGOBxxxxxx" +
                "P83DYl17rQRaMguH/FGApFSRl+7y8wJBAJE0whkjqUnVqBcS19dFQ7ikWRxxxxxx" +
                "P+N0wE/J8CBHOzE1q4jZDqrdsR1zNYGlVJX5FY/tositG+Xh1f8/VAcCQHxxxxxx" +
                "6yKa+3zWskoKks1C94slp9Xy6nuZN4b0GYUBCDkbb5tx6xQ5FKR7j+EyYsxxxxxx" +
                "1Jf/f1H7nxxxxxx";
        byte[] privateKeyBytes = Base64.getDecoder().decode(prikey);
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        PrivateKey privateKey = keyFactory.generatePrivate(keySpec);

        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(cryptograph));
        String decryptedData = new String(decryptedBytes);
        System.out.println("解密后:" + decryptedData);
        return decryptedData;
    }

至此,返回的解密后数据即为手机号。

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
为了在uniapp中接入极光一键登录,需要进行以下步骤: 1.在极光官网注册并创建应用,获取AppKey和AppSecret。 2.在uniapp项目中安装jpush插件,可以使用以下命令进行安装: ```shell npm install jpush-uniapp --save ``` 3.在App.vue文件中引入jpush插件并初始化: ```javascript import JPush from 'jpush-uniapp' export default { onLaunch: function() { JPush.init() } } ``` 4.在需要使用一键登录的页面中,调用jpush插件的login方法: ```javascript import JPush from 'jpush-uniapp' JPush.login({ appKey: 'yourAppKey', authPageConfig: { authLoginPage: 'yourAuthLoginPage', authLogo: 'yourAuthLogo', authNavHidden: true, authStatusBarHidden: true, authCustom: { privacyOne: ['yourPrivacyUrl1', 'yourPrivacyTitle1'], privacyTwo: ['yourPrivacyUrl2', 'yourPrivacyTitle2'] } } }, (res) => { console.log(res) }) ``` 其中,appKey为在极光官网创建应用时获取的AppKey,authPageConfig为一键登录页面的配置信息,包括登录页、logo、隐私协议等。 5.在Android平台上,需要在AndroidManifest.xml文件中添加以下权限: ```xml <uses-permission android:name="android.permission.READ_PHONE_STATE" /> ``` 6.在iOS平台上,需要在Info.plist文件中添加以下权限: ```xml <key>NSPhotoLibraryUsageDescription</key> <string>需要您的同意,才能访问相册</string> <key>NSCameraUsageDescription</key> <string>需要您的同意,才能访问相机</string> <key>NSMicrophoneUsageDescription</key> <string>需要您的同意,才能访问麦克风</string> <key>NSContactsUsageDescription</key> <string>需要您的同意,才能访问通讯录</string> <key>NSLocationWhenInUseUsageDescription</key> <string>需要您的同意,才能访问位置</string> <key>NSLocationAlwaysUsageDescription</key> <string>需要您的同意,才能访问位置</string> <key>NSLocationAlwaysAndWhenInUseUsageDescription</key> <string>需要您的同意,才能访问位置</string> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蠢萌赫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值