使授权控制器在重定向到登录页面期间添加指定的参数

时间:2019-09-11 06:40:49

标签: .net asp.net-core identityserver4 asp.net-core-2.2

我的IdentityServer4 Authorize控制器应未登录用户的授权请求重定向到Login\ReturnUrl="WhereICameFrom"很好,但是我需要在查询字符串(URL)中附加参数,例如:{{1} }。它必须是一个单独的参数,Login\ReturnUrl="WhereICameFrom"&AnotherParameter="MyValue"参数不能以任何方式包含在AnotherParameter参数的值中,因此这些不能解决问题

  • ReturnUrl

  • Login\ReturnUrl="WhereICameFrom&AnotherParameter=MyComputedValue"

有可能吗?

简短的问题,其中包含理解该问题所需的所有详细信息:我想授权控制器在重定向到登录页面的过程中添加指定的参数。

2 个答案:

答案 0 :(得分:0)

不确定是否有帮助,但是您可以尝试使其他参数成为已配置登录页面URL的静态部分。像这样:

services.AddIdentityServer((options) =>
{
    ...
    options.UserInteraction.LoginUrl = "~/Account/Login?AnotherParameter=MyValue";
    ...
});

不过,您必须进行彻底的测试,因为我认为这绝不是一种“标准”的工作方式...

答案 1 :(得分:0)

是否要将参数传递给Identity Server?您可以尝试:

options.Events.OnRedirectToIdentityProvider = async n =>
{

    n.ProtocolMessage.SetParameter("AnotherParameter", "MyComputedValue");

    await Task.FromResult(0);
};

Login方法中的身份服务器端:

var context = await _interaction.GetAuthorizationContextAsync(returnUrl);
var value = context.Parameters["AnotherParameter"];

更新:

以上解决方案将使参数包含在授权请求的redirect_uri中。

如果要在url之外,例如:Login\ReturnUrl="WhereICameFrom"&AnotherParameter="MyValue"。然后,您需要使用Oauth2/OIDC protocol中正确的参数acr_valuesstate