首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

微软禁止员工用安卓手机!!!

今天,看到一则炸裂的消息“微软要求中国员工禁止使用安卓手机,未有iPhone手机员工为其发放iPhone”,不知道各位小伙伴是否看到~

我又用英文去搜了一下,确实如此!

那么,微软为何要如此大动干戈禁止国内员工用安卓手机呢?

按照微软官方的说法,是因为员工身份认证程序「Microsoft Authenticator」和「Identity Pass」应用程序只在Apple  App Store和 Google Play Store上架,而并没有在国内安卓应用商店上架。

而对于国内的安卓机来说,是没有安装G Play应用框架的,在微软看来,没有安装G Play的安卓机就是不安全,所以,就一刀切了,它的认证应用也就不上架国内商店了,全员用IPhone了~

就我个人而言,我肯定反对微软这种对国产安卓机歧视的做法!

整个事件大概就是这样,作为技术人新闻始终都会过去的,我们还是得要研究技术,你是否思考过:我们的系统该如何接入这种身份认证服务「Microsoft Authenticator」呢?

比如我们经常用的Github,还比如咱们用的最多的堡垒机,都会有二次认证服务,如下图:

# 接入流程

我之前做量化系统的时候,刚好研究过该类认证服务的接入问题,我给大家阐述一下整体的接入流程:

添加依赖库:首先需要引入支持TOTP的库,com.warrenstrange的Google Authenticator是一个流行的选择。

生成密钥:为每个用户生成一个唯一的密钥,这个密钥会被用户用于Google Authenticator应用的配置。

生成二维码:用户扫描这个二维码来在Google Authenticator应用中配置账号。

验证TOTP:验证用户在Google Authenticator应用中生成的一次性密码(TOTP)是否正确。

接下来,我给出具体的代码实现~

# 生成密钥

使用GoogleAuthenticator库为用户生成一个唯一的密钥,代码如下:

import com.warrenstrange.googleauth.GoogleAuthenticator;import com.warrenstrange.googleauth.GoogleAuthenticatorKey;

public class TwoFactorAuth { public static void main(String[] args) { GoogleAuthenticator gAuth = new GoogleAuthenticator(); final GoogleAuthenticatorKey key = gAuth.createCredentials(); String secret = key.getKey();

System.out.println("Secret key: " + secret); }}

使用ZXing库生成二维码,用户可以扫描这个二维码将密钥添加到Google Authenticator应用中,代码如下:

import com.google.zxing.BarcodeFormat;import com.google.zxing.WriterException;import com.google.zxing.client.j2se.MatrixToImageWriter;import com.google.zxing.common.BitMatrix;import com.google.zxing.qrcode.QRCodeWriter;import com.warrenstrange.googleauth.GoogleAuthenticator;import com.warrenstrange.googleauth.GoogleAuthenticatorKey;

import java.io.IOException;import java.nio.file.FileSystems;import java.nio.file.Path;

public class GenerateQRCode { public static void main(String[] args) { GoogleAuthenticator gAuth = new GoogleAuthenticator(); final GoogleAuthenticatorKey key = gAuth.createCredentials(); String secret = key.getKey();

String email = "user@example.com"; String issuer = "ExampleApp"; String barCodeUrl = getGoogleAuthenticatorBarCode(secret, email, issuer); System.out.println("QR Barcode URL: " + barCodeUrl);

try { generateQRCodeImage(barCodeUrl, 350, 350, "QRCode.png"); } catch (WriterException | IOException e) { e.printStackTrace(); } }

private static String getGoogleAuthenticatorBarCode(String secretKey, String account, String issuer) { return "otpauth://totp/" + issuer + ":" + account + "?secret=" + secretKey + "&issuer=" + issuer; }

private static void generateQRCodeImage(String text, int width, int height, String filePath) throws WriterException, IOException { QRCodeWriter qrCodeWriter = new QRCodeWriter(); BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);

Path path = FileSystems.getDefault().getPath(filePath); MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path); }}

# 验证TOTP

用户在Google Authenticator应用中输入生成的验证码,你需要验证这个验证码是否正确,代码如下:

import com.warrenstrange.googleauth.GoogleAuthenticator;

public class VerifyTOTP { public static void main(String[] args) { GoogleAuthenticator gAuth = new GoogleAuthenticator(); String secretKey = "用户的密钥"; int verificationCode = 123456; // 用户从Google Authenticator应用中输入的验证码

boolean isCodeValid = gAuth.authorize(secretKey, verificationCode); if (isCodeValid) { System.out.println("验证成功"); } else { System.out.println("验证失败"); } }}

以上就是使用Java集成Google Authenticator的完整流程和代码实现,也是接入二次认证的整个流程,为你的系统增加了一道安全屏障!

最后,东哥还是想说,作为技术人吃瓜之余,还是得要提升自身的硬实力,别只抱怨环境,多花时间和金钱提升自身的实力;少做选择,多做尝试;只要试错成本在承受的范围内,那就大胆去尝试,试错的成本很低,但是错过的成本很高,同学们,一起加油吧

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OqTHdOrRkmbZxA8YpuTZfRAA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券