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

Authorization Code模式下OIDC中间件令牌交换及获取方式问询

关于Authorization Code模式下signin-oidc中间件的疑问解答

先给你个明确结论:是的,处理signin-oidc的OIDC中间件会自动帮你把授权码兑换成access token和refresh token——这正是它的核心职责之一,完全不需要你手动调用RequestAuthorizationCodeTokenAsync来完成兑换操作。

1. 中间件的自动处理逻辑

当用户在身份提供商(IdP)那边完成验证后,会被重定向到你的signin-oidc端点,这时候中间件会自动完成以下步骤:

  • 捕获IdP返回的授权码
  • 向IdP的token端点发起请求,自动兑换出access token、refresh token以及id token
  • 把这些令牌存储到你配置的认证方案中(通常是默认的Cookie认证)

2. 如何获取access token和refresh token

你可以通过HttpContext轻松获取这些令牌,常见场景的写法如下:

  • 在控制器/ Razor页面中:
    // 获取access token
    var accessToken = await HttpContext.GetTokenAsync("access_token");
    // 获取refresh token
    var refreshToken = await HttpContext.GetTokenAsync("refresh_token");
    
  • 在自定义中间件或授权策略中:
    可以从AuthenticationProperties里提取,或者通过ClaimsPrincipal的扩展方法获取(ASP.NET Core 3.1及以上版本都支持上述GetTokenAsync方法)

需要注意:要确保你在OIDC配置中开启了令牌保存权限,并请求了offline_access scope,否则中间件不会保存refresh token。示例配置片段:

.AddOpenIdConnect("oidc", options =>
{
    options.SaveTokens = true;
    options.Scope.Add("offline_access");
    // 其他IdP地址、客户端ID等配置...
});

3. 什么时候需要手动实现?

只有当你不使用官方OIDC中间件,或者需要完全自定义令牌兑换、存储逻辑的时候,才需要自己实现重定向URL、捕获授权码并调用RequestAuthorizationCodeTokenAsync。但绝大多数业务场景下,官方中间件已经封装了所有通用逻辑,足够满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:18:48