百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

在ABP框架中使用OAuth 2.0的推送授权请求(PAR)

liuian 2025-02-26 12:45 32 浏览

推送授权请求(PAR)是一项新的OAuth 2.0功能,允许客户端通过直接请求将OAuth 2.0授权请求的有效载荷推向授权服务器,并为他们提供了用作对数据的参考的请求URI在随后的授权端点的请求中。此功能在
https://tools.ietf.org/html/rfc9156
中定义。

Authorization Code Flow

让我们看一下当前ABP框架应用程序中的授权码流。

一个典型的ABP分层架构通常包含以下几个网站:

  • Acme.AuthServer: 集成OpenIddictOAuth2.0认证服务器.
  • Acme.AuthServer.Api.Host: API网站,它使用JWT bearer认证方案并通过Acme.AuthServer网站进行身份认证。
  • Acme.Web: 配置和启用OpenID Connect认证方案从Acme.AuthServer网站进行身份认证。

当我们在 Acme.Web网站尝试使用OpenID Connect认证时,它会构建一个认证请求并在浏览器中重定向到Acme.AuthServer网站。

GET https//auth-server.acme.com/connect/authorize

Query String Parameters:

client_id: AbpApp
redirect_uri: https://web.acme.com/signin-oidc
response_type: code
scope: openid profile email roles phone AbpAPI
response_mode: form_post
nonce: YzVkMj...
state: CfDJ8N...

如果你启用了Pkce,那么code_challengecode_challenge_method参数也会出现在请求中。

code_challenge: mJxMdU...
code_challenge_method: S256

当用户在Acme.AuthServer网站中进行认证后(如用户名和密码或者社交登录),它会在用户同意授权后(consent screen/page)会返回一个codeAcme.Web网站.

Acme.AuthServer网站将构建一个POST请求或者GET请求到Acme.Web网站。

POST https://web.acme.com/signin-oidc

Form Data Parameters(application/x-www-form-urlencoded):

code: LPjZ6C...
state: state: CfDJ8N...
iss: https://auth-server.acme.com/

Acme.Web网站收到code后,它会在应用中(不是浏览器中)发送一个HTTP请求使用获得的codeAcme.AuthServer请求access token

POST https://auth-server.acme.com/connect/token

Form Data Parameters(application/x-www-form-urlencoded):

client_id: AbpApp
client_secret: secret
code: LPjZ6C...
grant_type: authorization_code

到此为止,完成了授权码流的认证流程, 之后我们就可以使用access token来访问Acme.AuthServer.Api.Host网站的API了。

混合流程(Hybrid Flow)与隐式流程(Implicit Flow)和授权码流(Code Flow)类似。我们只讨论授权码流

不过授权码流可能有以下问题:

  • 授权请求可以被修改。通常,客户端应用会将用户的浏览器重定向到授权服务器,并附上授权 URL。没有任何机制可以阻止恶意行为者在将请求发送到授权服务器之前,修改其中的一个或多个参数。
  • 无法保证请求的来源。授权请求通常由客户端应用构建,用户的浏览器负责将其发送到授权服务器。然而,无法保证请求确实是由客户端应用构建的。任何人在知道一些数据(如客户端 ID 和重定向 URI)后,都可以构建一个授权请求。
  • 无法保证机密性。尽管浏览器通过 HTTPS 发送授权请求,但请求参数可能会被第三方应用程序拦截,如代理、负载均衡器,甚至是浏览器插件。这类恶意网络组件可以注入或更改请求参数,更不用说请求本身可能会被记录下来。
  • 浏览器的限制。最后,授权请求中的查询字符串如果过于复杂,可能会遇到浏览器对 URL 长度的限制。

为了解决这些问题,OAuth 2.0定义了Pushed Authorization Requests (PAR)

Pushed Authorization Requests (PAR)

OpenIdDict 6.1.0 版本开始支持Pushed Authorization Requests (PAR)ABP框架第一时间升级OpenIdDict版本(9.2版本可用),并在Volo.OpenIddict.Pro模块中添加了Pushed Authorization Requests (PAR)的配置.

你可以在创建/更新Application的时候配置Pushed Authorization Requests (PAR)


我们在看看使用Pushed Authorization Requests (PAR)的认证流程。

当我们在Acme.Web网站尝试使用OpenID Connect认证时它会在会在应用中(不是浏览器中)发送一个POST请求到授权服务器的par端点。

POST https://auth-server.acme.com/connect/par

Form Data Parameters:

client_id: AbpApp
client_secret: secret
redirect_uri: https://web.acme.com/signin-oidc
response_type: code
scope: openid profile email roles phone AbpAPI
response_mode: form_post
nonce: YzVkMjZmN...
state: CfDJ8NwA4...

如果你启用了Pkce,那么code_challengecode_challenge_method参数也会出现在POST请求中。

code_challenge: mJxMdU...
code_challenge_method: S256

授权服务器检查和验证成功后会返回request_uriAcme.Web应用。

{
"request_uri": "urn:ietf:params:oauth:request_uri:1FPVWn...",
"expires_in": 3599
}

Acme.Web网站收到成功响应后会构建一个授权请求,并在浏览器中重定向到授权服务器。

GET https//auth-server.acme.com/connect/authorize

Query String Parameters:
client_id: AbpApp
request_uri: urn:ietf:params:oauth:request_uri:1FPVWn...

同样, 当用户在Acme.AuthServer网站中通过授权后会返回一个codeAcme.Web网站, 然后就可以继续使用code请求access token了, 和上述的授权码流一样.

在应用中配置并启用PAR

ABPOpenIddict模块默认启用了PAR特性.

ASP NET Core 9.0OpenIdConnect 认证方案OpenIdConnectOptions中增加了一个新的
PushedAuthorizationBehavior
参数,你可以在你的应用中配置它.

描述
UseIfAvailable
如果身份提供者的发现文档或显式的 OpenIdConnect 配置中提供了 PAR 端点,则使用推送授权(PAR)。这是默认值。
Disable
即使身份提供者的发现文档或显式的 OpenIdConnect 配置中提供了 PAR 端点,也永远不使用推送授权(PAR)。如果身份提供者的发现文档表明需要使用推送授权(PAR),则处理将失败。
Require
始终使用推送授权(PAR),并在身份提供者的发现文档或显式的 OpenIdConnect 配置中未提供 PAR 端点时发出错误。
AddAbpOpenIdConnect("oidc", options =>
{
//...
options.PushedAuthorizationBehavior = PushedAuthorizationBehavior.Require;
//...
});

并非全部的认证客户端都支持PAR,比如Blazor WASM还不支持。

总结

Pushed Authorization Requests (PAR) 是一种新的 OAuth 2.0 功能,它增强了授权码流的健壮性。我们推荐你在你的应用中使用它.

参考

  • Volo.OpenIddict.Pro模块 https://abp.io/modules/Volo.OpenIddict.Pro
  • What Are OAuth Pushed Authorization Requests (PAR)? https://auth0.com/blog/what-are-oauth-push-authorization-requests-par/
  • OpenIddict Pushed Authorization Requests (PAR) https://documentation.openiddict.com/configuration/pushed-authorization-requests
  • Support for Pushed Authorization (PAR) in OIDC Handler https://github.com/dotnet/aspnetcore/pull/55069
  • RFC 9156 https://tools.ietf.org/html/rfc9156

相关推荐

windows11我的电脑在哪里打开

1/6通过“开始”进入“设置”-“时间和语言”。2/6在“时间和语言”界面选择“区域”3/6这里我们将区域更改位“新加披”,退出。4/6打开微软自带的市场,搜索“你的手机”获取并下载。5/6安装完成后...

win10怎么取消开机自启动(win10如何关闭开机自动启动)

要关闭Windows10的开机自动启动程序,你可以按下Win+R键,输入"msconfig"并按回车键打开系统配置工具。在"启动"选项卡中,你可以看到所有开机自动...

手机cpu排名2025(手机cpu排名榜)

一、2022手机CPU性能综合排名前八名手机CPU:1、型号:苹果A16---综合分数:暂无2、型号:骁龙8gen1---综合分数:42333、联发科天玑9000---综合分数:38724、...

论坛系统(论坛系统数据流图)

BBS是电子布告栏系统的简称,一种网站系统,也是目前流行网络论坛的前身。它允许用户使用终端程序通过调制解调器拨接或者因特网来进行连接,BBS站台提供布告栏、分类讨论区、新闻阅读、软件下载与上传、游戏、...

hp1020plus打印机无法打印(惠普1020plus打印机突然不能打印了)

 删除惠普打印机驱动和软件:1.如果你的打印机已通过USB连接到电脑,断开USB连接;2.打开控制面板—程序和功能(卸载或更改应用程序);3.在软件列表中找到惠普打印机,将其卸载;4.重启电脑...

wifi密码破解器电脑版(wifi密码破解工具电脑版)

肯定不是万能钥匙这种“破解”wifi的东西。不是一两次见到把万能钥匙当做破解wifi用的人了,但实际上那玩意就是个分享wifi的软件。你连上一个wifi,密码就会被分享到云端(可以不分享),别...

手机临时文件夹在哪个位置(手机临时文件夹在哪个位置找)

1.手机文件临时文件是指在手机使用过程中产生的临时文件。2.手机应用程序在运行时需要产生一些临时文件,如缓存文件、日志文件、临时下载文件等,这些文件可以提高应用程序的运行效率和用户体验。但是,这些...

安卓10系统下载(安卓10 下载)

方法及步骤:  其实使用安卓车机下载歌曲的方法十分的简单,具体操作步骤和安卓手机一模一样。  首先我们需要在车机的应用商店上,下载一个音乐播放器,例如网易云音乐或者QQ音乐等。  下载完成后点击进入...

华硕人工客服24小时吗(华硕售后人工客服)

华硕服务中心广东省惠州市惠东县城平深路(创富斜对面)惠东同心电脑城1L11(1.3km)笔记本电脑,平板电脑华硕服务中心广东省惠州市惠东县平山镇同心电脑城1F26(1.3km)笔记本电脑,平...

电脑音量小喇叭不见了(电脑声音喇叭图标不见了怎么办)

如果您电脑上的小喇叭(扬声器)不见了,可以尝试以下方法找回:1.检查设备管理器:在Windows下,右键点击“我的电脑”(或此电脑)->点击“属性”->点击“设备管理器”,查看“声音、视...

腾达路由器手机设置教程(腾达路由器手机设置教程视频)

用手机设置腾达路由器的方法如下:1在手机上打开浏览器,输入路由器背面的管理IP和用户及对应的密码2一般第一次打开,默认会跳出设置向导,准备好宽带用户名和密码,3按向导提示输入相应内容4在无线设置的安全...

自配电脑配置推荐(自配电脑配置推荐百度)

首先,像这类软件最低要求不高。最高没上限。纯粹看你的工程量大小。CPU有双核,内存有4G,就可以运行。但是实际体验肯定比较差,卡是肯德。渲染时间也会超长,一个小作品渲染几小时是正常的。稍微大点的工程也...

2025年平板性价比排行(2020年值得买的平板)

推荐台电P30S好。 基本配置:10.1英寸IPS广视角屏幕,1280*800分辨率,16:10的黄金显示比例,K9高压独立功放,支持3.5mm耳麦接口,联发科MT8183八核处理器,4GB...

2020显卡天梯图10月(2020显卡天梯图极速空间)

排行球队名称积分已赛胜平负进球失球净胜球  1?诺维奇城974629107753639 2?沃特福德91462710...

路由器加密防蹭网(路由器加密防蹭网吗)
  • 路由器加密防蹭网(路由器加密防蹭网吗)
  • 路由器加密防蹭网(路由器加密防蹭网吗)
  • 路由器加密防蹭网(路由器加密防蹭网吗)
  • 路由器加密防蹭网(路由器加密防蹭网吗)