標籤:
翻譯如下:
在某些情況下,比如單頁的應用程式,可以與多種認證來方式結合。例如,您的應用程式可能使用基於Cookie的身分識別驗證來登入和JavaScript的請求承載認證。在某些情況下,可能一個授權驗證的中介軟體有多個的執行個體。兩個Cookie中介軟體,其中一個包含了基本驗證,而另外一個當多個條件的認證被觸發由於這個使用者請求的操作需要額外的安全要求。
認證方案會被定義當認證的中介軟體已經配置認證的過程。例如:
app.UseCookieAuthentication(new CookieAuthenticationOptions(){ AuthenticationScheme = "Cookie", LoginPath = new PathString("/Account/Unauthorized/"), AccessDeniedPath = new PathString("/Account/Forbidden/"), AutomaticAuthenticate = false});app.UseBearerAuthentication(options =>{ options.AuthenticationScheme = "Bearer"; options.AutomaticAuthenticate = false;});
在如上的配置中,添加了兩個認證中介軟體,一個是Cookie,一個是Bearer。
注意:
添加多個身分識別驗證中介軟體時,應確保沒有將中介軟體配置為自動運行。 可以通過將AutomaticAuthenticate選項屬性設定為false來執行此操作。 如果你沒有加這一點,按方案將不起作用。
使用Authorize Attribute選擇方案
由於我們沒有將身分識別驗證中介軟體配置為自動運行並建立身份,因此在授權時必須選擇要使用的中介軟體。 選擇要授權的中介軟體的最簡單方法是使用ActiveAuthenticationSchemes屬性。 此屬性接收要使用的驗證方案的逗號分隔列表。 例如;
[Authorize(ActiveAuthenticationSchemes = "Cookie,Bearer")] public class MixedController : Controller
在上面的樣本中,Cookie和Bearer中介軟體將運行,並且有機會為目前使用者建立和附加身份。 通過指定單個方案,只有指定的中介軟體將運行;
[Authorize(ActiveAuthenticationSchemes = "Bearer")]
在這種情況下,只有具有Bearer方案的中介軟體將運行,並且任何基於Cookie的身份將被忽略。
在策略中選擇方案
如果您希望在策略中指定所需的方案,則可以在添加策略時設定“身分識別驗證方案”集合。
options.AddPolicy("Over18", policy =>{ policy.AuthenticationSchemes.Add("Bearer"); policy.RequireAuthenticatedUser(); policy.Requirements.Add(new Over18Requirement());});
在此樣本中,Over18這個策略將僅對由Bearer中介軟體建立的身份運行。
ASP.NET Core--按計劃身份限制