При вызове IdentityServer4 создается System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта - PullRequest
0 голосов
/ 20 декабря 2018

Я собираюсь получить токен на предъявителя через IdentityServer4 через мой веб-проект, и я получаю это исключение.Исключение составляет библиотека классов с открытым исходным кодом IdentityServer4.Поле url имеет значение null, и это вызывает исключение NullReference в методе AddQueryString, см. https://github.com/IdentityServer/IdentityServer4/blob/master/src/Extensions/StringsExtensions.cs

Файлы журнала показывают;

IdentityServer4.Endpoints.AuthorizeEndpoint: Information: ValidatedAuthorizeRequest{"ClientId": "SIR", "ClientName": "SIR", "RedirectUri": "http://localhost:53200/signin-oidc"," AllowedRedirectUris ": [" https://localhost:44314", "http://localhost:53200/signin-oidc"],"SubjectId ":" anonymous "," ResponseType ":" code id_token "," ResponseMode ":" form_post "," GrantType ":" hybrid "," RequestedScopes ":" openid profile "," State ":" OpenIdConnect.AuthenticationProperties =ответ http://localhost:53200/signin-oidc",» ": "636809130138863279.M2IyNTYyZTgtZTk0Ni00OWU5LWI4MmMtNGU2MWY4M2FkMzQzNzExYjRjYjYtOWY4MC00NjQwLWEyZGYtYzgzYjljZTY4ZDFj", "Raw": { "client_id":: "SIR", "redirect_uri" ""," Нонс WBfqf-a6W0K-0x6giakJP1GCkjUyG0wzOgAr9AuitPNyUb6wsIlzJN-YVV-ARRdTd5huJIIl3N0mpI95EbLzGKIVmAhXr4JiIWKo2dOCTFI7PH218T9V1vVkKP3kFmQgtRRYRagG9YEA2PvyMtxzQXMf4v3pPequ8Am7H_8TIfgMqspxAnTsXQ4K-cD_TBTVFc45AiDiylpWup1_Ovrpqu700JCGimHZJRuXP25MHMs_mode ": "form_post", "response_type": "id_token код", "Сфера": "профиль OpenID", "состояние": "OpenIdConnect.AuthenticationProperties = WBfqf-a6W0K-0x6giakJP1GCkjUyG0wzOgAr9AuitPNyUb6wsIlzJN-YVV-ARRdTd5huJIIl3N0mpI95EbLzGKIVmAhXr4JiIWKo2dOCTFI7PH218T9V1vVkKP3kFmQgtRRYRagG9YEA2PvyMtxzQXMf4v3pPequ8Am7H_8TIfgMqspxAnTsXQ4K-cD_TBTVFc45AiDiylpWup1_Ovrpqu700JCGimHZJRuXP25MHMs", "нонс": "636809130138863279.M2IyNTYyZTgtZTk0Ni00OWU5LWI4MmMtNGU2MWY4M2FkMzQzNzExYjRjYjYtOWY4MC00NjQwLWEyZGYtYzgzYjljZTY4ZDFj", "х-клиент-ы": "ID_NET461", "х-клиент-вер": "5.3.0.0"}} IdentityServer4.ResponseHandling.AuthorizeInteractionResponseGenerator: информация: Отображено Логин: Пользователь не идентифицирован IdentityServer4.ResponseHandling.AuthorizeInteractionResponseGenerator: Информация: Отображение имени для входа: пользователь не аутентифицирован IdentityServer4.ResponseHandling.AuthorizeInteractionResponseGenerator: Информация: Отображение имени для входа: пользователь не аутентифицирован IdentityServer4.ResponseHandling.AenetoponponGr: Информация: Отображение имени входа: пользователь не аутентифицирован. Исключение: «System.NullReferenceException» в IdentityServer4.dll. Исключение: «System.NullReferenceException» в IdentityServer4.dll, «dotnet.exe» (CoreCLR: clrhost): загружен «C:\ Program Files \ dotnet \ shared \ Microsoft.NETCore.App \ 2.1.6 \ System.Diagnostics.StackTrace.dll '.Символы загружены.'dotnet.exe' (CoreCLR: clrhost): загружен 'C: \ Program Files \ dotnet \ shared \ Microsoft.NETCore.App \ 2.1.6 \ System.Reflection.Metadata.dll'.Символы загружены.'dotnet.exe' (CoreCLR: clrhost): загружен 'C: \ Program Files \ dotnet \ shared \ Microsoft.NETCore.App \ 2.1.6 \ System.IO.MemoryMappedFiles.dll'.Символы загружены.IdentityServer4.Hosting.IdentityServerMiddleware: Критическое: необработанное исключение: ссылка на объект не установлена ​​для экземпляра объекта.

System.NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта.в IdentityServer4.Extensions.StringExtensions.AddQueryString (строковый url, строковый запрос) в C: \ local \ identity \ server4 \ IdentityServer4 \ src \ Extensions \ StringsExtensions.cs: строка 197 в IdentityServer4.Endpoints.Results.LoginPxtte) в C: \ local \ identity \ server4 \ IdentityServer4 \ src \ Endpoints \ Results \ LoginPageResult.cs: строка 61 в IdentityServer4.Hosting.IdentityServerMiddleware.Invoke (контекст HttpContext, маршрутизатор IEndpointRouter, сеанс IUserSession, события IEUns \ \ InventService):local \ identity \ server4 \ IdentityServer4 \ src \ Hosting \ IdentityServerMiddleware.cs: строка 59 IdentityServer4.Hosting.IdentityServerMiddleware: Критическое:Необработанное исключение: ссылка на объект не установлена ​​для экземпляра объекта.

Таким образом, в методе AddQueryString URL-адрес является нулевым.В моем веб-клиенте мой метод запуска:

public void Configuration(IAppBuilder app)
{
    app.UseCookieAuthentication(new CookieAuthenticationOptions
    {
        AuthenticationType = Settings.SignInAsAuthenticationType    // "Cookies";
    });

    app.UseOpenIdConnectAuthentication(openIdConnectOptions: new OpenIdConnectAuthenticationOptions
    {
        AuthenticationType = "oidc",
        Authority = Settings.AuthorityUrl,      //ID Server,  "https://localhost:44314/"; https://localhost:44307/
        ClientId = Settings.ClientId,           // "SIR"
        Scope = Settings.Scope,                 // "openid profile";
        ResponseType = Settings.ResponseType,   // "id_token code";
        SignInAsAuthenticationType = Settings.SignInAsAuthenticationType,
        //--------------------------------------// "Cookies";
        RedirectUri = Settings.RedirectUri,     // URL of website, http://localhost:53200/signin-oidc;
        RequireHttpsMetadata = Settings.RequireHttpsMetadata,
        //--------------------------------------// true
        ClientSecret = "secret"
    });

    app.Use(async (ctx, next) =>
    {
        var message = ctx.Authentication.User.Identity.IsAuthenticated
            ? $"User: {ctx.Authentication.User.Identity.Name}"
            : "User Not Authenticated";
        await next();
    });
}

Обратите внимание, что я использую Microsoft.Owin

Клиент в моем IdentityServer4:

public static IEnumerable<Client> Clients()
{
    return new[]
    {
        new Client
        {
            ClientId = "SIR",
            ClientName = "SIR",
            AllowedGrantTypes = GrantTypes.Hybrid,
            AllowedScopes = new[]
            {
                IdentityServerConstants.StandardScopes.OpenId,
                IdentityServerConstants.StandardScopes.Profile
            },
            RedirectUris = {
                "https://localhost:44314",
                "http://localhost:53200/signin-oidc"
            },
            ClientSecrets = { new Secret("secret".Sha256())}
        }
    };
}

Почемуэто и как мне это исправить?

...