Identityserver4 循环ReturnUrlParser时的空引用
我已经创建了一个自定义返回url解析器来确定哪个租户正在调用登录页面,但是当加载登录页面时,我在其中一个返回url解析器上得到一个空引用 在C:\local\identity\server4\IdentityServer4\src\IdentityServer4\Services\ReturnUrlParser.ParseAsync(字符串returnUrl)中的IdentityServer4.Services.ReturnUrlParser.ParseAsync处:第38行 在C:\local\identity\server4\IdentityServer4\src\IdentityServer4\Services\DefaultIdentityServerInteractionService.cs中的IdentityServer4.Services.DefaultIdentityServerInteractionService.GetAuthorizationContextAsync(字符串返回URL)中:IdentityServer4.Quickstart.UI.AccountController.BuildLoginViewModelAsync(字符串返回URL)第54行在D:\git\identity server\identity server 4\src\Fifthplay.identity server 4\Quickstart\Account\AccountController.cs中:第346行 我已经创建了IReturnUrlParser的自定义实现Identityserver4 循环ReturnUrlParser时的空引用,identityserver4,Identityserver4,我已经创建了一个自定义返回url解析器来确定哪个租户正在调用登录页面,但是当加载登录页面时,我在其中一个返回url解析器上得到一个空引用 在C:\local\identity\server4\IdentityServer4\src\IdentityServer4\Services\ReturnUrlParser.ParseAsync(字符串returnUrl)中的IdentityServer4.Services.ReturnUrlParser.ParseAsync处:第38行 在C:\local
public class MyReturnUrlParser: IReturnUrlParser
{
private IdentityServerConfigurationContext _identityServicecontext { get; set; }
private ILogger<MyReturnUrlParser> _logger;
public MyReturnUrlParser(IdentityServerConfigurationContext context, ILogger<MyReturnUrlParser> logger)
{
_identityServicecontext = context;
_logger = logger;
}
public bool IsValidReturnUrl(string returnUrl)
{
return true;
}
public Task<AuthorizationRequest> ParseAsync(string returnUrl)
{
if(string.IsNullOrEmpty(returnUrl))
return null;
... doing some custom stuff
return Task.FromResult(authorizationRequest);
}
公共类MyReturnUrlParser:IReturnUrlParser
{
私有标识服务器配置上下文_标识服务上下文{get;set;}
私人ILogger_记录器;
公共MyReturnUrlParser(IdentityServerConfigurationContext,ILogger记录器)
{
_identityServicecontext=上下文;
_记录器=记录器;
}
public bool IsValidReturnUrl(字符串返回URL)
{
返回true;
}
公共任务
我的下一个猜测是,由于某种原因,在所有可用的ReturnUrl解析器中循环时,默认URL解析器为null。以前有人经历过这种行为吗?或者我遗漏了什么明显的东西吗?默认URL解析器不能为null,因为您可能会在ReturnUrlParser.cs的第36行出现NullReferenceException
:
if (parser.IsValidReturnUrl(returnUrl))
是否粘贴了整个堆栈跟踪?是否在“ParseAsync”方法中引发异常
一种可能性是,URL解析器返回不应处理的URL的true
,并在ParseAsync
中掉落,因为它遇到了意外情况。我注意到,您总是从IsValidReturnUrl
返回true
,这意味着您的URL解析器将解析所有URL网址
您可以尝试移动您的注册行:
services.AddTransient<IReturnUrlParser, MyReturnUrlParser>();
services.AddTransient();
在调用services.AddIdentityServer()
之前,使您的解析器位于解析器集合的第一位:
什么是IdentityServerConfigurationContext?构造MyReturnUrlParser时如何创建它?这是一个用于查询IdentityServer数据库的DbContext。IdentityServerConfigurationContext的实例已向DI注册?
services.AddTransient<IReturnUrlParser, MyReturnUrlParser>();