2016-11-21 150 views
0

我前段時間使用oAuth2和OpenID進行了訪問控制,並且設法讓它工作得很好,但是現在我開始了一個新項目,並且必須再次實施令牌驗證。我使用了與之前項目相同的模式,設置,配置和技術(90%的設置相同),我的令牌已正確填充並作爲HTTP請求的標頭傳遞給我的API:oAuth2令牌未被API拾取

Old

Old Project Headers

翻譯: { 「ISS」: 「https://localhost」, 「AUD」: 「https://localhost/resources」, 「EXP」:1479710870, 「NBF」:1479707270, 「CLIENT_ID」:「隱含「, 」範圍「: 」OpenID的「, 」輪廓「, 」角色「, 」網絡「 ], 」子「: 」55dad807b33c2c2648342757「, 」auth_time「:1479705621, 」IDP「: 」idsrv「 , 「角色」: 「管理員」, 「功能」: 「表單視圖」, 「形式加」, 「......等」 ], 「AMR」: 「密碼」 ] }

New Project Headers

翻譯: { 「ISS」: 「https://localhost」, 「AUD」: 「https://localhost/resources」, 「EXP」:1479711165, 「NBF」:1479707565, 「CLIENT_ID」:「隱」, 「範圍」:[ 「的OpenID」, 「簡檔」, 「角色」, 「網絡」 ], 「分」: 「SYSTEM」, 「auth_time」:1479707564, 「IDP」 :「idsrv」, 「的作用「: 」系統用戶「, 」功能「: 」ADD_BUSS_UNIT「, 」ADD_EMP「, 」 ......等」 ], 「AMR」: 「密碼」 ] }

(Cache-control對新項目是額外的,可能會導致問題?似乎不太可能?)

無論如何,由於某種原因,當我到達控制器時,HttpContext.Current.User.Identity填充爲System.Security.Principal。的WindowsIdentity的而不是我希望看到的ClaimsIdentity:

Old Project User

New Project User

兩個項目之間最大的區別是,新的一個運行Windows Server 2008 R2和舊版本在Windows7上運行。 IIS版本是相同的,在IIS中的設置也是一樣的,正如我所提到的,大多數其他設置都是一樣的。

我的啓動類的API:

public void Configuration(IAppBuilder app) 
{ 
// Allow all origins 
app.UseCors(CorsOptions.AllowAll); 

JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>(); 
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; 

app.UseIdentityServerBearerTokenAuthentication(
    new IdentityServerBearerTokenAuthenticationOptions 
    { 
     Authority = Constants.STSAuthEndPoint, 
     RoleClaimType = "role", 
     RequiredScopes = new[] { "web" } 
    }); 
} 

一對夫婦的從我身邊想法,爲什麼它不工作:

  1. 模擬 - 難道是IIS或Windows Server冒充用戶?我檢查了兩臺服務器之間的設置,一切看起來都一樣。
  2. SUB值 - 我在新項目上使用用戶名,並在前一個上使用Guid格式ID。我記得看到有關子值是兩個值的組合,但我不知道這是否會導致問題?
  3. 角色 - 角色名稱中的空間是否會導致問題?
  4. 登錄屏幕 - 我爲新項目創建了一個新的登錄屏幕,這個登錄屏幕比前一個更加自定義,但登錄工作正常,API不會接收該用戶。

我有很多額外的信息可以提供,但我不想讓帖子太長,所以請讓我知道是否需要更多信息。

我很感激任何可以提供的幫助。

+0

是啓用了「Windows身份驗證」的新應用程序嗎? – Developer

+0

這不是,不。我禁用了除Anonymous以外的所有權威性,但我認爲我發現了問題,將在一分鐘內更新爲答案。 –

回答

0

看起來這是一隻紅鯡魚,實際問題是我的OWIN Startup類沒有開火。我發現了這一點,因爲我想踏進我的啓動類,並不能,所以我讀了對了一下,發現下面的文章:

OwinStartup not firing

我安裝Microsoft.Owin.Host.SystemWeb使用nuget和voila在項目中打包!它看起來像現在正在工作!