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

如何在移动端及后端解析微软身份验证返回的access token

后端Web API解析JWT Access Token实操方案

所有解析操作必须先做签名合法性校验,禁止直接解码payload字段,否则会面临伪造token的安全风险。你在jwt.io上能解析是因为jwt.io默认只做base64解码,不会校验签名合法性,后端解析时必须补全签名校验步骤。

通用实现逻辑

  • 第一步:从前端请求中提取access token,一般放在请求头的Authorization字段,格式为Bearer <token>,需要先去掉Bearer 前缀拿到纯token字符串
  • 第二步:拿到你签发JWT时用的签名密钥(如果是非对称加密的话拿公钥)
  • 第三步:调用对应语言的JWT库,传入token、密钥、签名算法(比如HS256、RS256)做验签,验签通过后自动返回解码后的payload字段,就能拿到邮箱、姓名等自定义声明
  • 第四步:可选校验token的过期时间exp、签发方iss、受众aud等标准声明,进一步提升安全性

常见Web API框架实现示例

.NET Core Web API

先安装System.IdentityModel.Tokens.JwtNuGet包,代码示例:

using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using Microsoft.IdentityModel.Tokens;

// 配置参数替换为你自己的签发配置
var secretKey = "你的JWT签名密钥";
var securityKey = new SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes(secretKey));
var validationParameters = new TokenValidationParameters
{
    ValidateIssuerSigningKey = true,
    IssuerSigningKey = securityKey,
    ValidateIssuer = true,
    ValidIssuer = "你的签发方",
    ValidateAudience = true,
    ValidAudience = "你的受众",
    ValidateLifetime = true,
    ClockSkew = TimeSpan.Zero
};

var tokenHandler = new JwtSecurityTokenHandler();
try
{
    // 验签+解析
    ClaimsPrincipal claimsPrincipal = tokenHandler.ValidateToken(accessToken, validationParameters, out SecurityToken validatedToken);
    var jwtToken = (JwtSecurityToken)validatedToken;
    // 获取自定义字段
    var email = jwtToken.Claims.FirstOrDefault(c => c.Type == "email")?.Value;
    var name = jwtToken.Claims.FirstOrDefault(c => c.Type == "name")?.Value;
}
catch (SecurityTokenException)
{
    // 验签失败,token无效,返回401
}

Node.js Express Web API

安装jsonwebtoken库后使用:

const jwt = require('jsonwebtoken');

// 配置参数替换为你自己的签发配置
const secretKey = '你的JWT签名密钥';

try {
    // 验签+解析
    const payload = jwt.verify(accessToken, secretKey, {
        issuer: '你的签发方',
        audience: '你的受众'
    });
    // 获取自定义字段
    const email = payload.email;
    const name = payload.name;
} catch (err) {
    // token无效,返回401
}

Python Flask/Django Web API

安装PyJWT库后使用:

import jwt

# 配置参数替换为你自己的签发配置
secret_key = "你的JWT签名密钥"

try:
    # 验签+解析
    payload = jwt.decode(
        accessToken,
        secret_key,
        algorithms=["HS256"],
        issuer="你的签发方",
        audience="你的受众"
    )
    email = payload.get("email")
    name = payload.get("name")
except jwt.InvalidTokenError:
    # token无效,返回401

注意事项

  • 如果你的JWT用的是非对称加密(比如RS256),把上面示例中的对称密钥替换成公钥即可,不需要传入私钥
  • 不要硬编码密钥到代码中,建议放到环境变量、配置中心中管理
  • 尽量不要在JWT的payload中存放敏感信息,因为payload只是base64编码,任何人拿到token都可以解码查看

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:24:03