2017-08-09 60 views
0

當我嘗試對/connect/token端點執行HTTP/POST,我得到一個NullReferenceException以下堆棧跟蹤:IHttpAuthenticationFeature.Handler爲空時

在IdentityServer4.Hosting.AuthenticationHandler.AuthenticateAsync(AuthenticateContext 上下文) 在Microsoft.AspNetCore.Http.Authentication.Internal.DefaultAuthenticationManager.d__12.MoveNext()

調試到IdentityServer4的源代碼,我發現這種情況監守IHttpAuthenticationFeatureHttpContext.Featuresnull,因此代碼落入if(auth == null)情況下(看源代碼here):

IHttpAuthenticationFeature GetAuthentication() 
    { 
     var auth = _context.HttpContext.Features.Get<IHttpAuthenticationFeature>(); 
     if (auth == null) 
     { 
      auth = new HttpAuthenticationFeature(); 
      _context.HttpContext.Features.Set(auth); 
     } 
     return auth; 
    } 

Startup.ConfigureServices(...)如下所示:

services.AddTransient<IUserStore<IdentityUser>, CustomStore> 
(
    provider => new CustomStore 
    (
     Configuration["company:data:legacy:connectionString"] 
    ) 
); 

services.AddIdentity<IdentityUser, IdentityRole>() 
     .AddUserManager<IdentityUserManager>() 
     .AddDefaultTokenProviders(); 

services.AddIdentityServer() 
     .AddTemporarySigningCredential() 
     .AddInMemoryApiResources(IdentityConfig.GetApiResources()) 
     .AddInMemoryClients(IdentityConfig.GetClients()) 
     .AddAspNetIdentity<IdentityUser>(); 

,如果我我想不出缺少一些服務註冊或配置。

回答

0

看起來好像無法在客戶端上找到Cookie和OpenId身份驗證處理程序。請確保您已正確地在您呼叫端點的Web客戶端中添加上述中間件配置。

app.UseCookieAuthentication(new CookieAuthenticationOptions() 
      { 

       AuthenticationScheme = "Cookies" 
      }); 

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
{ 
    AuthenticationScheme = "oidc", 
    SignInScheme = "Cookies", 

    Authority = "http://localhost:5000", 
    RequireHttpsMetadata = false, 

    ClientId = "mvc", 
    ClientSecret = "secret", 

    ResponseType = "code id_token", 
    Scope = { "api1", "offline_access" }, 

    GetClaimsFromUserInfoEndpoint = true, 
    SaveTokens = true 
}); 

更新記住,如果你所要求的令牌(即使你通過郵遞員這樣做),你必須設置一個客戶端,通過客戶端ID和密碼(取決於您的客戶端配置)在您的請求包含您從之前授權請求獲得的已驗證授予類型和代碼。檢查this

+0

嘿,但我使用郵差測試'/連接/令牌'。而我的客戶不會是基於.NET Core的。 –

+0

你也通過郵遞員授權嗎?你可以粘貼你的發佈請求? – JayDeeEss

+0

我只想得到至少一個'401'。我假設我應該能夠發送一個沒有標題和無效憑證的請求,它應該工作,我誤解了嗎? –