IdentityServer4-与#x27;重定向URI';和';返回URL';
我对Identity Server和OAuth 2.0都是新手,我很难理解在登录后每个网络请求会发生什么 我已经使用identity server设置了一个非常基本的授权码授予登录过程,该过程将导致以下一系列网络请求IdentityServer4-与#x27;重定向URI';和';返回URL';,identityserver4,Identityserver4,我对Identity Server和OAuth 2.0都是新手,我很难理解在登录后每个网络请求会发生什么 我已经使用identity server设置了一个非常基本的授权码授予登录过程,该过程将导致以下一系列网络请求 用户尝试使用客户端上的[Authorize]属性访问资源(/home/secret) 它们被重定向到登录屏幕 他们登录 他们现在可以访问受保护的资源 我很难理解在触发回调url时发生了什么 我理解,redirect\u uri是一个OAuth术语,指授权服务器(在本例中为id
- 用户尝试使用客户端上的
属性访问资源([Authorize]
)/home/secret
- 它们被重定向到登录屏幕
- 他们登录
- 他们现在可以访问受保护的资源
redirect\u uri
是一个OAuth术语,指授权服务器(在本例中为identity server)将向其发送授权代码的客户端上的地址(针对设置了RedirectUris
的客户端进行设置)。这说明了上面的登录oidc
请求
…但是回调怎么办呢?在用户被质询并重定向到登录页面后,此url似乎存储为ReturnUrl
参数
此ReturnUrl
与标准OAuthredirect\u uri
之间有什么区别
在我看过的OAuth教程中,它们将密钥交换过程描述如下
- 授权服务器检查用户名和密码
- 将
发送到授权\u代码
重定向\u uri
,authorization\u code
和client\u id
从客户端发送回授权服务器client\u secret
已选中<代码>访问\u令牌发送到authorization\u code
重定向\u uri
用于访问受保护的资源访问\u令牌
任何帮助都将不胜感激 为了理解对该参数的需求,我们必须考虑到,在授权端点中,我们可以获得与用户的不同类型的交互,并且在重定向到客户端应用程序之前,它们也可以一个接一个地链接起来。例如,交互可以是登录视图的显示,以及成功登录后的同意屏幕 用户交互 将评估请求的条件,以确定必须呈现给用户的交互类型。以下是访问
/authorize
端点时可能发生的一些交互:
- 必须将用户重定向到登录视图
- 必须将用户重定向到同意视图
- 必须将用户重定向到“拒绝访问”视图
- 请求
参数为prompt
,但用户未经身份验证或未处于活动状态。将返回登录所需的错误none
- 请求
参数为提示
,需要同意,但还没有同意。将返回一个需要同意的错误无
- 提示模式(登录、无、同意)
- 如果用户是否经过身份验证
- 用户是否处于活动状态
- 如果客户端允许或不允许本地登录
UserInteraction.LoginReturnUrlParameter
来配置此参数的名称。还可以配置登录端点的路径:
services.AddIdentityServer(选项=>
{
options.UserInteraction.LoginReturnUrlParameter=“myParamName”;//默认值=“returnUrl”
options.UserInteraction.LoginUrl=“/user/login”;//默认值=“/account/login”
})
该参数的值为常量AuthorizeCallback
,由authorized
常量和“/callback”
组成:
public const string Authorize=“连接/授权”;
public const string AuthorizeCallback=Authorize+“/callback”;
在哪里使用此参数?
在您的情况下,/authorize
端点已解析为重定向到登录视图。请注意添加到登录url的returnUrl
参数:
/login?ReturnUrl=/connect/authorize/callback
我们可以看到,这个参数在登录视图的模型中使用。以下代码是从IdentityServer4建议的UI中提取的:
- 登录(获取)。显示登录页面
[HttpGet]
公共异步任务登录(字符串返回URL)
{
//建立一个模型,让我们知道在登录页面上显示什么
var vm=await BuildLoginViewModelAsync(returnUrl);//将returnUrl添加到LoginViewModel.returnUrl属性
...
返回视图(vm);
}
- 登录(post)。验证凭据并重定向到returnUrl:
[HttpPost]
公共异步任务登录(LoginInputModel模型,字符串按钮)
{
...
if(_users.ValidateCredentials(model.Username、model.Password))
{
...
wait HttpContext.SignInAsync(isuser,props);//创建“idsrv”cookie
...
return Redirect(model.ReturnUrl);//如果我们来自一个交互,我们最终将被重定向到ReturUrl
...
}
}
但是我想你的问题是,为什么idp不直接使用重定向URI(signin oidc)而不是使用本地返回URL重定向到客户端应用程序 IdentityServer将再次收到请求,以重新评估oth
state
REQUIRED if the "state" parameter was present in the client
authorization request. The exact value received from the
client.