You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js+Java-SpringBoot集成Office 365 SSO及权限配置咨询

Office 365 SSO 接入 Vue + SpringBoot 全流程解答

1. SSO 是否仅需在 Vue.js 前端实现?

不行,必须前后端配合完成。前端只负责引导用户跳转到 Office 365 的认证页面、接收回调返回的令牌,但绝对不能只靠前端完成认证逻辑——前端的令牌很容易被伪造或篡改,后端必须参与验证令牌的合法性,才能确保登录请求的真实有效。

2. 认证成功后会返回什么内容?

Office 365 基于 OAuth2 + OpenID Connect 协议实现认证,成功后会返回两类核心令牌(均为 JWT 格式):

  • ID Token:包含用户核心身份信息,比如用户邮箱email、姓名name、唯一用户IDoid、租户IDtid、令牌签发方iss、受众aud(你的应用ID)、有效期exp等。这个令牌是身份验证的核心,解析后就能拿到用户的基本身份信息。
  • Access Token:如果配置了对应权限,会返回此令牌,用于调用 Microsoft Graph API(比如获取用户更多信息)。但如果你的场景仅需登录验证,User.Read权限下的 Access Token 不是必需的,核心用 ID Token 即可。
  • 可选Refresh Token:用于在 Access Token 过期后,无需重新登录就能获取新令牌,适合长会话场景。

你可以在前端用jwt-decode库解析这些令牌,查看具体字段。

3. 如何配置应用权限?

所有配置操作都在 Azure AD 门户完成:

  1. 登录 Azure 门户,进入Azure Active Directory → 应用注册,点击新注册。
  2. 填写应用名称,选择支持的账户类型(比如“仅此组织目录中的账户”适用于企业内部应用,“任何组织目录中的账户”则面向外部租户),设置重定向URI——填你的 Vue 应用回调地址,例如http://localhost:8080/auth/callback。
  3. 注册完成后,记录客户端ID和租户ID,前端和后端都会用到这两个参数。
  4. 进入API权限 → 添加权限,选择Microsoft Graph → 委派权限,搜索并添加User.Read权限(该权限仅用于获取用户基本信息,完全满足你的登录场景)。
  5. 若为企业租户应用,需点击授予管理员同意(否则每个用户登录时都要手动授权)。
  6. 在认证模块中配置令牌类型,确保系统会返回 ID Token。

注意:因为你的应用自行管控权限,所以不需要添加应用权限(这类权限用于后端服务无需用户参与的API调用场景),仅需委派权限即可。

4. 是否需要后端操作来确保认证有效性?

必须要,后端的核心作用就是校验令牌合法性,具体要做这些事:

  • 验证 ID Token 签名:确保令牌由微软官方签发,未被篡改。可以使用微软的 MSAL4J 库(Java 版)自动完成签名、签发方、有效期等校验。
  • 校验令牌核心字段:确认aud(受众)是你的应用客户端ID,iss(签发方)符合 Office 365 的地址格式(比如https://login.microsoftonline.com/租户ID/v2.0),exp(有效期)未过期。
  • 关联本地用户权限:解析 ID Token 拿到用户邮箱或oid后,去自有数据库查询该用户的权限(比如角色、可访问功能),然后生成应用自身的会话令牌(比如自定义 JWT)返回给前端,后续前端请求接口时使用此令牌,而非直接用 Office 365 的令牌。
  • 接口权限校验:后端每个需要权限控制的接口,都要验证前端传来的会话令牌,确认用户权限符合要求。

举个简单的 Java 代码示例(用 MSAL4J 验证 ID Token):

// 初始化验证器
PublicClientApplication pca = PublicClientApplication.builder(CLIENT_ID)
        .authority(AUTHORITY) // 格式:https://login.microsoftonline.com/租户ID/v2.0
        .build();

// 验证ID Token
ValidationResult result = pca.validateIdToken(idToken);
if (result.getValidationSucceeded()) {
    // 令牌合法,解析用户信息
    IAuthenticationResult authResult = result.getAuthenticationResult();
    String userEmail = authResult.account().username();
    // 去数据库查询用户权限逻辑
} else {
    // 令牌非法,拒绝登录
    throw new SecurityException("Invalid ID Token");
}

内容的提问来源于stack exchange,提问作者Robert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 09:21:35