IdentityServer4-与#x27;重定向URI';和';返回URL';

IdentityServer4-与#x27;重定向URI';和';返回URL';,identityserver4,Identityserver4,我对Identity Server和OAuth 2.0都是新手,我很难理解在登录后每个网络请求会发生什么 我已经使用identity server设置了一个非常基本的授权码授予登录过程,该过程将导致以下一系列网络请求 用户尝试使用客户端上的[Authorize]属性访问资源(/home/secret) 它们被重定向到登录屏幕 他们登录 他们现在可以访问受保护的资源 我很难理解在触发回调url时发生了什么 我理解,redirect\u uri是一个OAuth术语,指授权服务器(在本例中为id

我对Identity Server和OAuth 2.0都是新手,我很难理解在登录后每个网络请求会发生什么

我已经使用identity server设置了一个非常基本的授权码授予登录过程,该过程将导致以下一系列网络请求

  • 用户尝试使用客户端上的
    [Authorize]
    属性访问资源(
    /home/secret
  • 它们被重定向到登录屏幕
  • 他们登录
  • 他们现在可以访问受保护的资源
我很难理解在触发回调url时发生了什么

我理解,
redirect\u uri
是一个OAuth术语,指授权服务器(在本例中为identity server)将向其发送授权代码的客户端上的地址(针对设置了
RedirectUris
的客户端进行设置)。这说明了上面的
登录oidc
请求

…但是回调怎么办呢?在用户被质询并重定向到登录页面后,此url似乎存储为
ReturnUrl
参数

ReturnUrl
与标准OAuth
redirect\u uri
之间有什么区别

在我看过的OAuth教程中,它们将密钥交换过程描述如下

  • 授权服务器检查用户名和密码
  • 授权\u代码
    发送到
    重定向\u uri
  • authorization\u code
    client\u id
    client\u secret
    从客户端发送回授权服务器
  • authorization\u code
    已选中<代码>访问\u令牌发送到
    重定向\u uri
  • 访问\u令牌
    用于访问受保护的资源
我正在努力将这个过程映射到Identity Server似乎正在做的事情


任何帮助都将不胜感激

为了理解对该参数的需求,我们必须考虑到,在授权端点中,我们可以获得与用户的不同类型的交互,并且在重定向到客户端应用程序之前,它们也可以一个接一个地链接起来。例如,交互可以是登录视图的显示,以及成功登录后的同意屏幕

用户交互

将评估请求的条件,以确定必须呈现给用户的交互类型。以下是访问
/authorize
端点时可能发生的一些交互:

  • 必须将用户重定向到登录视图
  • 必须将用户重定向到同意视图
  • 必须将用户重定向到“拒绝访问”视图
  • 请求
    prompt
    参数为
    none
    ,但用户未经身份验证或未处于活动状态。将返回登录所需的错误
  • 请求
    提示
    参数为
    ,需要同意,但还没有同意。将返回一个需要同意的错误
这些是决定应该使用哪种交互作用的一些条件:

  • 提示模式(登录、无、同意)
  • 如果用户是否经过身份验证
  • 用户是否处于活动状态
  • 如果客户端允许或不允许本地登录
url参数来自何处

配置IdentityServer4时,可以通过设置选项
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.