JA Plus 开发者文档 JA Plus 开发者文档
首页
📖 白皮书 (opens new window)
  • 名词解释
  • 快速开始

    • 使用jap-simple
    • 使用jap-social
    • 使用jap-oauth2
    • 使用jap-oidc
    • 使用jap-sso
    • 使用jap-mfa
    • 使用jap-http-api
    • 使用jap-ldap
    • 错误代码
  • IDS

    • 简介
    • 快速开始
    • 自定义scope
    • 自定义登录页面
    • 自定义确认授权页面
    • 自定义缓存
    • 自定义Token加密密钥
    • 使用PKCE模式
    • 自动授权
    • 错误代码
  • starter

    • jap-spring-boot-starter
    • jap-simple-spring-boot-starter
    • jap-social-spring-boot-starter
    • jap-oauth2-spring-boot-starter
    • jap-oidc-spring-boot-starter
  • jap-ids的demo
  • 前后端分离架构中使用JAP
  • SpringBoot中使用JAP
  • 问题反馈
  • 项目问题
  • 异常问题
  • 功能问题
  • 数据看板🔥
  • 贡献指南
  • 行为准则
  • 用户权益
  • 贡献者们
  • 社区配套 (opens new window)
  • 教程
  • 投稿
  • 资讯
  • 关于
  • 友情链接
  • 捐赠列表
  • 其他开源
  • 更新记录
收藏
GitHub (opens new window)

FuJie Team

以开源的形式赋能开发者. Just auth into any app.
首页
📖 白皮书 (opens new window)
  • 名词解释
  • 快速开始

    • 使用jap-simple
    • 使用jap-social
    • 使用jap-oauth2
    • 使用jap-oidc
    • 使用jap-sso
    • 使用jap-mfa
    • 使用jap-http-api
    • 使用jap-ldap
    • 错误代码
  • IDS

    • 简介
    • 快速开始
    • 自定义scope
    • 自定义登录页面
    • 自定义确认授权页面
    • 自定义缓存
    • 自定义Token加密密钥
    • 使用PKCE模式
    • 自动授权
    • 错误代码
  • starter

    • jap-spring-boot-starter
    • jap-simple-spring-boot-starter
    • jap-social-spring-boot-starter
    • jap-oauth2-spring-boot-starter
    • jap-oidc-spring-boot-starter
  • jap-ids的demo
  • 前后端分离架构中使用JAP
  • SpringBoot中使用JAP
  • 问题反馈
  • 项目问题
  • 异常问题
  • 功能问题
  • 数据看板🔥
  • 贡献指南
  • 行为准则
  • 用户权益
  • 贡献者们
  • 社区配套 (opens new window)
  • 教程
  • 投稿
  • 资讯
  • 关于
  • 友情链接
  • 捐赠列表
  • 其他开源
  • 更新记录
收藏
GitHub (opens new window)
  • 使用指南
  • 名词解释
  • 快速开始

  • IDS

    • IDS OAuth 2.0 服务端
    • jap-ids 快速开始
    • 自定义scope
    • 自定义登录页面
    • 自定义确认授权页面
    • 自定义缓存
    • 自定义Token加密密钥
    • 使用PKCE模式
      • 关于 PKCE
      • 使用 PKCE
    • 自动授权
    • jap-ids 错误代码
  • starter

  • 指南
  • IDS
FuJie Team
2021-09-20

使用PKCE模式

提示

本文将讲解如何使用PKCE模式

# 关于 PKCE

关于 PKCE 的介绍,请参考 什么是 PKCE? (opens new window)。

# 使用 PKCE

jap-ids 中已经实现了 PKCE 模式,开发者可以在 搭建完成 Oauth 服务 后,使用 PKCE 模式获取 Token 信息。

PKCE 模式和普通授权码模式在请求时,只有参数上的区别。

在 PKCE 模式下

  • 在请求授权端点时,需要传递 code_challenge 和 code_challenge_method 两个参数。
  • 在请求 token 端点时,需要传递 code_verifier。
  • PKCE 模式下,全程不需要传递也不需要保存 client_secret。
参数 含义 作用
code_verifier 一种加密的随机字符串 用于关联对 token 请求的授权请求
code_challenge 质询码(有些文章中翻译为“挑战码”,这是一个概念) 请求 token 时,比对/验证 code_verifier
code_challenge_method 质询码的生成方法,支持plain和S256两种方式 对 code_challenge 加密,以及在请求 token 节点时,对 code_verifier 进行验证

熟悉了以上概念,我们就很容易能实现 PKCE 模式的授权码请求。伪代码如下:

请求授权端点:

// jap-ids 提供了生成 `code_verifier` 的方法
String codeVerifier = OauthUtil.generateCodeVerifier();
// codeChallengeMethod 一般和客户端绑定,这儿示例是从客户端中获取 codeChallengeMethod
String codeChallengeMethod = clientDetail.getCodeChallengeMethod();
// 通过 `code_verifier` 和 `code_challenge_method` 生成 `code_challenge`
String codeChallenge = OauthUtil.generateCodeChallenge(codeChallengeMethod, codeVerifier);

// 生成授权地址
https://{host}/oauth/authorize?client_id=xx&response_type=code&scope=read&redirect_uri=xx&state=xx&code_challenge=xx&code_challenge_method=xx
1
2
3
4
5
6
7
8
9

注意

在请求授权端点时,应对 code_verifier 进行缓存,当授权服务器回调回来时,需要获取到 code_verifier 然后请求令牌端点。

比如在上面这段代码中,生成 codeVerifier 后,需要加上:

// 将 codeVerifier 放入缓存
cache.set("codeVerifier", codeVerifier);
1
2

用户登录并确认授权后,回调到开发者的系统,开发者的系统中通过 code 换取 token:

// 从缓存中获取 codeVerifier
String codeVerifier = cache.get("codeVerifier");

// 生成获取 token 的地址
https://{host}/oauth/token?grant_type=authorization_code&client_id=xx&redirect_uri=xx&code=xx&code_verifier=xx
1
2
3
4
5
编辑 (opens new window)
#jap-ids#OAuth2#PKCE
Last Updated: 2021/10/07, 18:03:43
自定义Token加密密钥
自动授权

← 自定义Token加密密钥 自动授权→

最近更新
01
经验总结:关于为 JAP 开发不同语言的 Demo 的总结
11-02
02
jap-spring-boot-starter 使用帮助
10-28
03
使用jap-ldap
10-25
更多文章>
Theme by Vdoing | Copyright © 2021-2022

友情链接:UniAdmin | 江如意的博客

Copyright © 2021-2040 FUJIE. All rights reserved. 北京符节科技有限公司版权所有 | 京ICP备2020044519号-4
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式