我前段時間使用oAuth2和OpenID進行了訪問控制,並且設法讓它工作得很好,但是現在我開始了一個新項目,並且必須再次實施令牌驗證。我使用了與之前項目相同的模式,設置,配置和技術(90%的設置相同),我的令牌已正確填充並作爲HTTP請求的標頭傳遞給我的API:oAuth2令牌未被API拾取
Old
翻譯: { 「ISS」: 「https://localhost」, 「AUD」: 「https://localhost/resources」, 「EXP」:1479710870, 「NBF」:1479707270, 「CLIENT_ID」:「隱含「, 」範圍「: 」OpenID的「, 」輪廓「, 」角色「, 」網絡「 ], 」子「: 」55dad807b33c2c2648342757「, 」auth_time「:1479705621, 」IDP「: 」idsrv「 , 「角色」: 「管理員」, 「功能」: 「表單視圖」, 「形式加」, 「......等」 ], 「AMR」: 「密碼」 ] }
新
翻譯: { 「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:
老
新
兩個項目之間最大的區別是,新的一個運行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" }
});
}
一對夫婦的從我身邊想法,爲什麼它不工作:
- 模擬 - 難道是IIS或Windows Server冒充用戶?我檢查了兩臺服務器之間的設置,一切看起來都一樣。
- SUB值 - 我在新項目上使用用戶名,並在前一個上使用Guid格式ID。我記得看到有關子值是兩個值的組合,但我不知道這是否會導致問題?
- 角色 - 角色名稱中的空間是否會導致問題?
- 登錄屏幕 - 我爲新項目創建了一個新的登錄屏幕,這個登錄屏幕比前一個更加自定義,但登錄工作正常,API不會接收該用戶。
我有很多額外的信息可以提供,但我不想讓帖子太長,所以請讓我知道是否需要更多信息。
我很感激任何可以提供的幫助。
是啓用了「Windows身份驗證」的新應用程序嗎? – Developer
這不是,不。我禁用了除Anonymous以外的所有權威性,但我認爲我發現了問題,將在一分鐘內更新爲答案。 –