【问题标题】:owin middlware with IdentityServer3.AccessTokenValidation in ASP.NET 5? returns null object exception在 ASP.NET 5 中使用 IdentityServer3.AccessTokenValidation 的 owin middlware?返回空对象异常
【发布时间】:2015-11-05 18:56:10
【问题描述】:

我正在尝试让 IdentityServer3.AccessTokenValidation 在 ASP.NET 5 Web 应用程序中工作,但下面的代码会引发空异常,我是否遗漏了什么?

project.json - 依赖项(部分)

"IdentityServer3.AccessTokenValidation": "2.0.0-build00019",
"Microsoft.AspNet.WebApi.Owin": "5.2.3",
"Microsoft.Owin.Host.SystemWeb": "3.0.1",
"Microsoft.AspNet.Authentication.OAuthBearer": "1.0.0-beta6",
"Microsoft.Owin.Security.OAuth": "3.0.0",
"Microsoft.AspNet.Owin": "1.0.0-beta6",
"Microsoft.AspNet.Authorization": "1.0.0-beta6",
"Microsoft.IdentityModel.Protocol.Extensions": "1.0.0",
"Newtonsoft.Json": "6.0.6"

Startup.cs

        app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
        {
            Authority = "https://localhost:44300/",
            RequiredScopes = new[] { "api1" }
        });

扩展方法

    public static void UseIdentityServerBearerTokenAuthentication(this IApplicationBuilder app, IdentityServerBearerTokenAuthenticationOptions options)
    {
        app.UseOwin(addToPipeline =>
        {
            addToPipeline(next =>
            {
                var builder = new Microsoft.Owin.Builder.AppBuilder();

                builder.UseIdentityServerBearerTokenAuthentication(options);

                var appFunc = builder.Build(typeof(Func<IDictionary<string, object>, Task>)) as Func<IDictionary<string, object>, Task>;
                return appFunc;
            });
        });
    }

以下行继续抛出空对象异常但无法确定缺少什么

builder.UseIdentityServerBearerTokenAuthentication(options);

堆栈跟踪

At IdentityServer3.AccessTokenValidation.DiscoveryDocumentIssuerSecurityTokenProvider..ctor(String discoveryEndpoint, IdentityServerBearerTokenAuthenticationOptions options, ILoggerFactory loggerFactory) in c:\projects\thinktecture-identityserver-v3-  accesstokenvalidati\source\AccessTokenValidation\Plumbing\DiscoveryDocumentIssuerSecurityTokenProvider.cs:line 43
at Owin.IdentityServerBearerTokenValidationAppBuilderExtensions.ConfigureLocalValidation(IdentityServerBearerTokenAuthenticationOptions options, ILoggerFactory loggerFactory) in c:\projects\thinktecture-identityserver-v3-accesstokenvalidati\source\AccessTokenValidation\IdentityServerBearerTokenValidationAppBuilderExtensions.cs:line 100
at Owin.IdentityServerBearerTokenValidationAppBuilderExtensions.UseIdentityServerBearerTokenAuthentication(IAppBuilder app, IdentityServerBearerTokenAuthenticationOptions options) in c:\projects\thinktecture-identityserver-v3-accesstokenvalidati\source\AccessTokenValidation\IdentityServerBearerTokenValidationAppBuilderExtensions.cs:line 50
at Portal.IdentityServerAccessTokenValidationAppBuilderExtensions.<>c__DisplayClass0_0.<UseIdentityServerBearerTokenAuthentication>b__1(Func`2 next) in C:\code\Sense.Care\src\Portal\Configuration\IdentityServerAccessTokenValidationAppBuilderExtensions.cs:line 23
at Microsoft.AspNet.Builder.OwinExtensions.<>c__DisplayClass0_1.<UseOwin>b__1(RequestDelegate next1)
at Microsoft.AspNet.Builder.Internal.ApplicationBuilder.Build()
at Microsoft.AspNet.Hosting.Internal.HostingEngine.BuildApplication()
at Microsoft.AspNet.Hosting.Internal.HostingEngine.Start()
at Microsoft.AspNet.Loader.IIS.RuntimeHttpApplication.ApplicationStart(IHttpApplication application)
at Microsoft.AspNet.Loader.IIS.HttpApplicationBase.InvokeApplicationStart(IHttpApplication application)

我正在使用下面的身份服务器

https://github.com/IdentityServer/IdentityServer3.Samples/tree/master/source/AspNet5Host

【问题讨论】:

    标签: c# owin asp.net-core openid-connect identityserver3


    【解决方案1】:

    我也有这个 NullPointerException。问题是方法app.GetLoggerFactory(); (来自 IAppBuilder)返回 null。 就我而言,此方法在我调用后返回 null

    app.Map("/admin", adminApp =>
            {
                var factory = new IdentityManagerServiceFactory();
                factory.ConfigureSimpleIdentityManagerService();
    
                adminApp.UseIdentityManager(new IdentityManagerOptions()
                {
                    Factory = factory
                });
            });
    

    因此将方法builder.UseIdentityServerBearerTokenAuthentication(options); 放在app.Map 之前解决了NullPointer 问题。 但是现在我有一个问题,似乎不可能在同一个项目中托管 WebApi 和 IdentityServer,但这是另一个问题..

    【讨论】:

    • 您是否设法在 ASP.NET 5 中实现此功能?在 Nugget 包 IdentityServer3.AccessTokenValidation 中定义的扩展方法仅针对 OWIN 设计,因此我使用了 Microsoft.AspNet.WebApi.Owin 包,其中包含可用于在 OWIN 和 ASP.NET 5 之间桥接的 UseOwin 扩展方法跨度>
    • 是的,它正在工作。所以 WebApi 和 IdentityServer 可以在同一个应用程序中运行,您必须使用 ValidationMode = ValidationMode.ValidationEndpoint。否则它会在启动期间尝试发现数据,此时 IdentityServer 没有运行。
    猜你喜欢
    • 2019-04-27
    • 2017-05-16
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    相关资源
    最近更新 更多