Class OpenIDConnectController

java.lang.Object
tech.riemann.nif.oidc.OpenIDConnectController

@RestController @RequestMapping("/oauth2/oidc") public class OpenIDConnectController extends Object
OpenID Connect控制器

提供OIDC认证相关的HTTP接口

主要功能: 1. 获取登录URL(/oauth2/oidc/login-url) 2. 处理OIDC回调登录(/oauth2/oidc/login) 3. 处理登出(/oauth2/oidc/logout)

认证流程: 1. 前端调用login-url获取OIDC授权URL 2. 用户重定向到OIDC提供商进行授权 3. 授权完成后回调到login接口 4. 使用授权码换取Token和用户信息 5. 通过CallbackHandler处理回调结果

Author:
Kerbores(kerbores@riemann.tech)
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final String
    登录前地址的Cookie名称(登录成功后回跳)
    static final String
    nonce的Cookie名称(防ID Token重放)
    static final String
    PKCE代码验证器的Cookie名称
    static final String
    state的Cookie名称(防登录CSRF)
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    addCookie(jakarta.servlet.http.HttpServletResponse response, String name, String value, int age)
    添加安全的 HTTP Cookie 到响应中
    void
    callback(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response)
    处理 OpenID Connect 认证回调请求
    tech.riemann.nif.auth.service.AuthUser
    获取当前登录用户信息
    tech.riemann.nif.auth.service.AuthUser
    login(String code, jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response)
    处理用户登录请求,使用 OpenID Connect 授权码进行认证
    void
    login(String from, String codeVerifier, String state, String nonce, jakarta.servlet.http.HttpServletResponse response, jakarta.servlet.http.HttpServletRequest request)
     
    loginUrl(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, String from, String codeVerifier, String state, String nonce)
     
    void
    logout(jakarta.servlet.http.HttpServletResponse response)
    处理用户退出登录请求,重定向到 OpenID Connect 登出页面
    获取 OpenID Connect 登出地址

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

  • Constructor Details

    • OpenIDConnectController

      public OpenIDConnectController()
  • Method Details

    • loginUrl

      @GetMapping("login-url") @XssIgnore public String loginUrl(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, @RequestParam(required=false) String from, @RequestParam(required=false,name="pkce_code_verifier") String codeVerifier, @RequestParam(required=false) String state, @RequestParam(required=false) String nonce) throws UnsupportedEncodingException
      Throws:
      UnsupportedEncodingException
    • login

      @GetMapping("login") public void login(@RequestParam(required=false) String from, @RequestParam(required=false,name="pkce_code_verifier") String codeVerifier, @RequestParam(required=false) String state, @RequestParam(required=false) String nonce, jakarta.servlet.http.HttpServletResponse response, jakarta.servlet.http.HttpServletRequest request) throws IOException
      Throws:
      IOException
    • logoutUrl

      @GetMapping("logout-url") @XssIgnore public String logoutUrl()
      获取 OpenID Connect 登出地址
      Returns:
      OpenID Connect 登出地址
    • logout

      @GetMapping("logout") public void logout(jakarta.servlet.http.HttpServletResponse response) throws IOException
      处理用户退出登录请求,重定向到 OpenID Connect 登出页面
      Parameters:
      response - HttpServletResponse 对象,用于执行重定向操作
      Throws:
      IOException - 重定向过程中可能发生的 IO 异常
    • callback

      @GetMapping("callback") public void callback(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response)
      处理 OpenID Connect 认证回调请求
      Parameters:
      request - HttpServletRequest 对象,包含回调请求的参数
      response - HttpServletResponse 对象,用于处理回调响应
    • login

      @PostMapping("login") public tech.riemann.nif.auth.service.AuthUser login(@RequestParam(required=false) String code, jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response)
      处理用户登录请求,使用 OpenID Connect 授权码进行认证

      id_token 校验(验签 + 过期 + nonce)在 OpenIDConnectService 内部完成

      Parameters:
      code - OpenID Connect 授权码,用于获取访问令牌和 ID 令牌
      Returns:
      认证用户信息
    • currentUser

      @GetMapping("current-user") public tech.riemann.nif.auth.service.AuthUser currentUser()
      获取当前登录用户信息
      Returns:
      当前登录用户信息,未登录时返回null
    • addCookie

      public void addCookie(jakarta.servlet.http.HttpServletResponse response, String name, String value, int age)
      添加安全的 HTTP Cookie 到响应中
      Parameters:
      response - HttpServletResponse 对象,用于添加 cookie
      name - cookie 名称
      value - cookie 值
      age - cookie 有效期,单位为分钟