当前位置: 首页 > news >正文

网站集成微软账户一键登录(支持Windows Hello 面容、指纹等)-微软Azure的Oatuh2.0的集成

简介

在个人网站中集成微软 OAuth 2.0 登录,可以显著降低用户的使用门槛。用户无需再单独注册账号或记忆新的密码,只需使用已有的 Microsoft 账户即可快速完成登录。借助 Windows Hello,用户可以直接通过人脸识别或指纹验证完成身份认证,在保证安全性的同时,获得更流畅、自然的登录体验。如今越来越多的网站选择集成,特别是pc网站。在个人手机网站上集成Apple ID登录的比较多。  

 

本文将介绍怎么创建Oauth 2.0 账户,来让网站集成微软登录,包括azure的应用配置和对应关系,后端代码将使用 spring oauth2 client (spring boot 3.5.X版本),不包含oauth 2.0协议的讲解。 

触发微软登录的效果,可以用电脑的指纹或者面容、PIN码登录在支持Windows Hello的设备上面。

image

 

如今越来越多的网址,集成微软登录 或者苹果登录,方便用户快速注册登录: 

 

image

 

注册Oauth 2.0 应用方法

 

1、注册Azure的账户。主页 - Microsoft Azure

 

2、完成注册了进行Azure首页,搜索:应用注册。

image

 

 

 

 

 3、点击新注册。

image

 4、填写应用基本信息和后端的回调地址

image

 

 5、填写之后下一步,然后打开刚刚注册的应用,关注下面几个选项:

image

 

client-id
目录(租户) ID:issuer-uri会用到拼接之后才是你完整的地址,issuer-uri=https://login.microsoftonline.com/a98***********************/v2.0   
客户端凭据: 相当于client-secret,获取这些信息后,填写到spring boot yml 配置文件中:
 

根据协议,可以访问 https://login.microsoftonline.com/a98**********************/v2.0/.well-known/openid-configuration 端点,来获取Oauth 2.0的端点信息,比如授权接口、获取accessToken的接口。

由于我使用了spring oauth2 client 框架会自动读取这些端点信息,帮我完成oauth2的流程,从而获取用户信息。打印这些端点,便于一些不使用框架的情况下,方便他们手动请求接口。

{"token_endpoint": "https://login.microsoftonline.com/a98*************************************/oauth2/v2.0/token","token_endpoint_auth_methods_supported": ["client_secret_post","private_key_jwt","client_secret_basic","self_signed_tls_client_auth"],"jwks_uri": "https://login.microsoftonline.com/a98*************************************/discovery/v2.0/keys","response_modes_supported": ["query","fragment","form_post"],"subject_types_supported": ["pairwise"],"id_token_signing_alg_values_supported": ["RS256"],"response_types_supported": ["code","id_token","code id_token","id_token token"],"scopes_supported": ["openid","profile","email","offline_access"],"issuer": "https://login.microsoftonline.com/a98*************************************/v2.0","request_uri_parameter_supported": false,"userinfo_endpoint": "https://graph.microsoft.com/oidc/userinfo","authorization_endpoint": "https://login.microsoftonline.com/a98*************************************/oauth2/v2.0/authorize","device_authorization_endpoint": "https://login.microsoftonline.com/a98*************************************/oauth2/v2.0/devicecode","http_logout_supported": true,"frontchannel_logout_supported": true,"end_session_endpoint": "https://login.microsoftonline.com/a98*************************************/oauth2/v2.0/logout","claims_supported": ["sub","iss","cloud_instance_name","cloud_instance_host_name","cloud_graph_host_name","msgraph_host","aud","exp","iat","auth_time","acr","nonce","preferred_username","name","tid","ver","at_hash","c_hash","email"],"kerberos_endpoint": "https://login.microsoftonline.com/a98*************************************/kerberos","mtls_endpoint_aliases": {"token_endpoint": "https://mtlsauth.microsoft.com/a98*************************************/oauth2/v2.0/token"},"tls_client_certificate_bound_access_tokens": true,"tenant_region_scope": "AS","cloud_instance_name": "microsoftonline.com","cloud_graph_host_name": "graph.windows.net","msgraph_host": "graph.microsoft.com","rbac_url": "https://pas.windows.net"
}

 

后端spring security oauth 2.0 应用配置:

根据上面的应用注册的信息,我们配置spring boot 后端项目的配置:

spring:security:oauth2:client:registration:microsoft:provider: microsoft               client-id: 328******************************************client-secret: V*****************************************redirect-uri: "https://xxx域名/api/login/oauth2/code/{registrationId}"scope: openid,email,profile   # 申请的权限(根据需要填写)provider:microsoft:issuer-uri: https://login.microsoftonline.com/a98********************/v2.0
@Slf4j
@Controller
public class DefaultController {@GetMapping("/authorized")//此次我配置了 oauth2Login成功后跳转到的successHandler,此次可以写入cookie等 重定向的方式来通知前端。
public String authorized(Authentication authentication, HttpServletResponse response) {//断点在 Authetication 中已经可以获取,到微软账户登录成功的信息了,包括用户名、邮箱等,可以根据业务需要注册账户 或者使用TokenRelay filter处理accessToken令牌 oauth2LoginService.handleOAuth2LoginSuccess(authentication, response);log.info("重定向到前端: {} (domain={}, secure={})",this.appBaseUri, cookieDomain, cookieSecure);return "redirect:" + this.appBaseUri;}
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-oauth2-client</artifactId></dependency>

 

登录流程:

1. 前端放按钮,用户点击按钮跳转下面链接(这个地址并不是 redirect-uri,这是框架定义的 ):

   api/oauth2/authorization/microsoft

 

2. 重定向到:

   https://login.microsoftonline.com/.../authorize

 

3. 用户完成人脸 / 指纹(Windows Hello)

 

4. Microsoft 回调(这个对应redirect-uri):

   /login/oauth2/code/microsoft?code=xxx

 

5. Spring Security 完成认证 、也获取到了用户的信息、引导用户注册或者使用TokenRelay 转发给后面api资源服务器、通知前端登录成功。

 

项目参考

我的项目用到了spring官方的代码参考,你可以下载官方的参考代码来当初始化模板改写:

spring-authorization-server/samples at main · spring-projects/spring-authorization-server · GitHub

http://www.jsqmd.com/news/116130/

相关文章:

  • 三大MQ核心场景匹配:Kafka/RabbitMQ/RocketMQ该怎么选?
  • 告警通知方式:邮件、短信、Slack、钉钉等告警通知方式的配置
  • 2025.12.20
  • 【滤波跟踪】基于带线性等式约束(LEC)的固定滞后平滑问题研究ASCMKS ASEPKS ASPMKS ASMRKS ASDEKS ASLECKS多种滤波算法研究附Matlab代码
  • 转换成小写字母
  • 系统安全加固:禁用不必要服务和端口,及时更新安全补丁
  • 某中心与高校共建人类与人工智能科学中心
  • Ansible入门指南——自动化运维的第一步
  • 我发现Zstd压缩级太高内存涨 后来调level参数优化平衡
  • 研究生必备!9个AI写论文工具,10分钟生成1万字问卷类论文含真实参考文献
  • 从入门到精通:大模型赋能千行百业的百万元级AI解决方案价值图谱
  • 【毕设】车辆故障管理系统的设计实现(任务书+文献综述+答辩PPT+论文)
  • 代码挑战:构建一个支持“并发安全”的防抖 Hook,确保在 transition 期间不会丢弃最后的更新
  • 2025大模型完全指南:从零基础到月薪30K+的AI工程师之路_全网最新首发AI大模型入门教程(非常详细)
  • 【毕设】基于深度学习的交通标识识别系统的设计与实现 (开题+任务书+论文+答辩PPT)
  • AI元人文构想:迈向人类与AI的意义共治
  • 【C2000系列DSP的Bootloader详解】如何利用脚本自动生成Hex/Bin/S19文件
  • 深度解析:为什么 React 不允许在 `useEffect` 里同步调用导致重渲染的 `setState`?
  • Flutter与OpenHarmony订单列表组件开发指南
  • 火山引擎 MongoDB 进化史:从扛住抖音流量洪峰到 AI 数据底座 - 指南
  • 【C2000系列DSP的反向灌电流】为什么热插拔的时候I2C总线电平会被拉低?
  • 代码实战:利用 `useSyncExternalStore` 实现一个支持“时间旅行”的全局状态管理器
  • Flutter与OpenHarmony购物车组件完整实现
  • 【C2000系列DSP的Bootloader详解】实现过程、流程图与示例代码
  • 手写实现 `useLazyValue`:一个只有在组件真正进入视口时才进行昂贵计算的自定义 Hook
  • 二叉树的前中后和层序遍历
  • SchoolDash Alpha冲刺随笔4 - Day 7
  • 微观交通流仿真软件:AIMSUN_(13).案例研究与实践
  • 跟着Datawhale动手学Ollama - TASK3: Ollama API 的使用
  • 【C2000系列DSP的Bootloader详解】如何利用脚本自动合并hex文件