Authing 知识库
🛠 开发资源🥂 集成案例🔭 常见问题🖥 控制台
1.0.0
1.0.0
  • 欢迎
  • Authing 概述
  • 快速开始
    • 第一个应用
    • 基础概念
    • 实现单点登录
    • 控制台概览
    • 部署模型
  • 进阶指南
    • 理解认证和授权
      • 用户名 - 密码认证
      • 邮箱 - 密码认证
      • 手机 - 验证码认证
      • JWT Token 释义及使用
      • 验证 JWT Token
    • 配置用户权限
    • 最佳开发实践
    • 接入小程序扫码登录
      • 接入私有化小程序
    • 接入社会化登录
    • 接入 OAuth 2.0
      • 创建 OAuth 应用
      • 使用 OAuth 授权
    • 接入 OpenID Connect
      • 创建 OIDC 应用
      • 使用 OIDC 授权
      • 理解 OIDC 流程
      • OIDC 常见问题
    • 配置 LDAP 服务
    • 使用 Authing 的 LDAP 用户目录
    • 接入 SAML
      • 创建 SAML Identity Provider 应用
      • 创建 SAML Service Provider 应用
      • 理解 SAML 流程
      • 同时使用 Authing 作为 SP 和 IdP
      • 使用 SAML Identity Provider
        • 在阿里云访问管理中使用
        • 在腾讯云访问管理中使用
        • 在 Auth0 中使用
      • 使用 SAML Service Provider
        • 与 Auth0 SAML IdP 对接
        • 与 SSOCircle SAML IdP 对接
    • 使用 Webhook
    • 错误代码
  • 开发资源
    • 开发资源
    • API(GraphQL)
    • Guard for Web
    • Guard VS 自定义 UI
    • SDK for Web
      • 读取/修改用户权限
      • 绑定社会化登录
      • 管理 MFA 口令
      • 自定义请求链接
    • SDK for 微信小程序
    • SDK for Java
    • SDK for Objective-C
    • SDK for Python
    • SDK for Go
    • SDK for PHP
    • 函数计算(FaaS)
  • 通信
    • 邮件
    • SMS
  • MFA
    • 配置 MFA 安全口令
    • 接入 MFA
  • 安全
    • 配置 Web 安全域
    • 配置用户池密码强度
    • 配置密码加密函数
  • 其他
    • 常见问题
    • 集成案例
      • 使用 Authing 补充 AWS 中国区 Cognito User Pool
    • 社交互联数据
      • Authing 与社交互联数据
    • 为 Authing 贡献 SDK
      • 了解 Authing 的模块
Powered by GitBook
On this page
  • 发送 Token 给 Authing 服务器验证
  • 各语言使用 GraphQL 的方法
  • 验证 JWT Token 合法性的 GraphQL
  • 使用 OIDC 应用的密钥验证 Token
  • 在线验证
  • 验证 OIDC access_token 或 id_token 的合法性
  • 验证 OAuth access_token 合法性

Was this helpful?

  1. 进阶指南
  2. 理解认证和授权

验证 JWT Token

PreviousJWT Token 释义及使用Next配置用户权限

Last updated 5 years ago

Was this helpful?

JWT Token 是用户登录后的唯一凭证,验证 Token 有三种方法:

发送 Token 给 Authing 服务器验证

此方式适用于未 流程的应用进行验证,若你使用了 OIDC,请参考:。

Authing 使用 进行数据交换,以下以 JavaScript 为例,演示如何发送 Token 给 Authing 服务器:

import axios from 'axios'

axios({
  method: 'POST',
  operationName: 'checkLoginStatus',
  query: `query checkLoginStatus($token: String) {
    checkLoginStatus(token: $token) {
      status
      code
      message
      token {
        data {
          email
          id
          clientId
          unionid
        }
        iat
        exp
      }
    }
  }`,
  variables: {
    token: 'USER_JWT_TOKEN'
  },
}).then((res) => {
  const d = res.data;
  if (d.errors) {
    throw d.errors[0];
  }
  return d.data.checkLoginStatus;
});
.then((loginStatus) => {
  // handle login status
})
.catch((error) => {
  // handle error
});

字段解释:

  1. status:Token 状态,true 为正常,false 为非法;

  2. code:状态代码,200 正常,非 200 不正常;

  3. message:提示信息;

  4. token:

    1. data:用户信息,email 为用户邮箱,id 为用户的唯一标识,clientId 为用户池 id,unioind 为用户使用三方登录时用户在三方登录平台的 id;

    2. iat:Token 签发时间;

    3. exp:Token 过期时间;

若你使用了 Web SDK,使用上可以简单一些,如下所示:

import Authing from 'authing-js-sdk'

(async () => {
    const authing = await new Authing({
        clientId: 'your_client_id',
        secret: 'your_client_secret'
    });
    
    
    const result = await authing.checkLoginStatus('USER_JWT_TOKEN');
})()

若 Token 合法,则返回数据为:

{
  status: false,
  code: 200,
  message: '已登录',
  token: {
    ... // Token 数据
  }
}

当 status 为 false 时,有三种情况,分别返回:

{
  status: false,
  code: 2020,
  message: '未登录'
}
{
  status: false,
  code: 2206,
  message: '登录信息已过期' 
}
{
     status: false,
     code: 2207,
     message: '登录信息有误'
 }

若你使用的为非 JavaScript 语言,请参考以下链接查看如何发送 GraphQL 请求:

各语言使用 GraphQL 的方法

验证 JWT Token 合法性的 GraphQL

query checkLoginStatus($token: String) {
    checkLoginStatus(token: $token) {
      status
      code
      message
      token {
        data {
          email
          id
          clientId
          unionid
        }
        iat
        exp
      }
    }
  }

字段解释:

  1. status:Token 状态,true 为正常,false 为非法;

  2. code:状态代码,200 正常,非 200 不正常;

  3. message:提示信息;

  4. token:

    1. data:用户信息,email 为用户邮箱,id 为用户的唯一标识,clientId 为用户池 id,unioind 为用户使用三方登录时用户在三方登录平台的 id;

    2. iat:Token 签发时间;

    3. exp:Token 过期时间;

使用 OIDC 应用的密钥验证 Token

如果你使用了 OIDC 流程,请使用此方式验证 Token。

密钥在控制台中 OIDC 应用的详情中可以获取到,如下图所示:

以下验证合法性的代码以 Node 为例(需要安装 jsonwebtoken)。

const jwt = require('jsonwebtoken');

try {
  let decoded = jwt.verify('JSON Web Token from client', 'your_secret'),
    expired = (Date.parse(new Date()) / 1000) > decoded.exp
  if (expired) {
    // 过期
  }else {
    // 合法也没过期,正常放行
  }
} catch (error) {
  // 不合法
}

为了避免在客户端暴露 Token,建议将 Token 验证放在服务端执行。

在线验证

验证 OIDC access_token 或 id_token 的合法性

GET https://oauth.authing.cn/oauth/oidc/validate_access_token

验证 OIDC 相关 token 合法性的线上接口。

Path Parameters

Name
Type
Description

access_token

string

值为 access_token 或 id_token

{
    "state": 1,
    "isRevoked": false,
    "isDeleted": false,
    "_id": "yokj1gN8kCBixIhc6KEj7SNsMcJ",
    "id": "yokj1gN8kCBixIhc6KEj7SNsMcJ",
    "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJkVlJmenZEbHZQRG50dG9LWnJ1WkciLCJzdWIiOiI1Y2U1M2FlYTlmODUyNTdkZDEzMmQ3NDkiLCJpc3MiOiJodHRwczovL29hdXRoLmF1dGhpbmcuY24vb2F1dGgvb2lkYyIsImlhdCI6MTU2OTU4MDMwOCwiZXhwIjoxNTY5NTgzOTA1LCJzY29wZSI6Im9wZW5pZCBwcm9maWxlIiwiYXVkIjoiNWQwMWUzODk5ODVmODFjNmMxZGQzMWRlIn0.RZ1NWMajncZggkpBt7iWxhHG3QhP8nIqWKaGysyujYo",
    "accessTokenExpiresAt": "2019-09-27T11:31:45.000Z",
    "scope": "openid profile",
    "appId": "5d01e389985f81c6c1dd31de",
    "userOrClientId": "5ce53aea9f85257dd132d749",
    "when": "2019-09-27T10:31:48.000Z",
    "iss": "https://oauth.authing.cn/oauth/oidc",
    "sub": "5ce53aea9f85257dd132d749",
    "aud": "5d01e389985f81c6c1dd31de",
    "exp": 1569583905000,
    "iat": 1569580308000,
    "user_id": "5ce53aea9f85257dd132d749",
    "issued_to": "https://sso.authing.cn",
    "audience": "5d01e389985f81c6c1dd31de",
    "expires_in": 3360,
    "access_type": "offline"
}
{
    "code": 1920,
    "message": "查找 session 发生错误"
}
{
    "code": 1921,
    "message": "session 不存在"
}
{
    "code": 1922,
    message: "token 不合法"
}
{
    "code": 1923,
    "message": "token 过期"
}
{
    "code": 1924,
    "message": "app 不存在"
}

验证 OAuth access_token 合法性

GET https://oauth.authing.cn/authenticate

验证 OAuth token 合法性的线上接口

Path Parameters

Name
Type
Description

access_token

string

OAuth 签发的 access_token

{
    "state": 1,
    "token": {
        "isRevoked": false,
        "isDeleted": false,
        "_id": "5d8df3d12914983cab6430b1",
        "accessToken": "b4177a2e01060169fc724112b10703fda49e7d69",
        "accessTokenExpiresAt": "2019-09-27T12:34:41.480Z",
        "refreshToken": "fd56d928ed3f00b18db14550d63d9f3a051812fc",
        "refreshTokenExpiresAt": "2019-10-11T11:34:41.480Z",
        "scope": "profile",
        "grantType": "authorization_code",
        "appId": "5ce52da3b0148671e7f5bfd7",
        "userOrClientId": "5ce53aea9f85257dd132d749",
        "when": "2019-09-27T11:34:41.481Z",
        "__v": 0
    },
    "isRevoked": false,
    "isDeleted": false,
    "_id": "5d8df3d12914983cab6430b1",
    "id": "5ce53aea9f85257dd132d749",
    "accessToken": "b4177a2e01060169fc724112b10703fda49e7d69",
    "accessTokenExpiresAt": "2019-09-27T12:34:41.480Z",
    "scope": "profile",
    "grantType": "authorization_code",
    "appId": "5ce52da3b0148671e7f5bfd7",
    "userOrClientId": "5ce53aea9f85257dd132d749",
    "when": "2019-09-27T11:34:41.481Z",
    "iss": "https://sso.authing.cn",
    "sub": "5ce53aea9f85257dd132d749",
    "aud": "5ce52da3b0148671e7f5bfd7",
    "exp": 1569587681480,
    "iat": 1569584081481,
    "user_id": "5ce53aea9f85257dd132d749",
    "issued_to": "https://sso.authing.cn",
    "audience": "5ce52da3b0148671e7f5bfd7",
    "expires_in": 3360,
    "access_type": "offline"
}

如果你对如何在后端处理 OIDC 有困惑,请参考 Github 上的示例代码:。

oidc-demo
发送 Token 给 Authing 服务器验证
使用 OIDC 应用的密钥(secret)验证 Token
使用 OIDC
使用 OIDC 应用的密钥验证 Token
GraphQL
通过 OIDC 应用或 OAuth 应用的在线验证接口验证
GraphQL Code Libraries, Tools and Services
Logo