翻譯如下:
在某些情況下,比如單頁的應用程序,可以與多種認證來方式結合。例如,您的應用程序可能使用基於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中間件創建的身份運行。
