iT邦幫忙

2022 iThome 鐵人賽

DAY 16
1

ASP.NET Core中的授權是由 AuthorizeAttribute 和其各種參數所控制。在最基本的形式中,將 [Authorize] 屬性套用至控制器動作Razor Page,會限制對該元件的存取權給已驗證的使用者。

簡單授權

以下範例在 Controller 上加入 [Authorize] 屬性,在這個 Controller 裡的所有 Action 都需經過授權才可以使用。

[Authorize]
public class AccountController : Controller
{
    public ActionResult Login()
    {
    }

    public ActionResult Logout()
    {
    }
}

如果整個 Controller 只有少數 Action 需經過授權驗證,可以直接將 [Authorize] 屬性加在Action上。
*只剩下 Logout Action需經過授權才能存取,其他的 Action 任何人皆可存取。

public class AccountController : Controller
{
   public ActionResult Login()
   {
   }

   [Authorize]
   public ActionResult Logout()
   {
   }
}

如果有Action不須經過授權(例如登入頁面)可以另外加上 [AllowAnonymous],使個別Action允許未經驗證存取。

[Authorize]
public class AccountController : Controller
{
    [AllowAnonymous]
    public ActionResult Login()
    {
    }

    public ActionResult Logout()
    {
    }
}

角色授權

若想針對角色來進行授權,可以在 Authorize屬性後加上角色名稱,例如 AdministrationController 只允許管理者(Administrator)存取,如下

[Authorize(Roles = "Administrator")]
public class AdministrationController : Controller
{
    public IActionResult Index() =>
        Content("Administrator");
}

多個角色可以用逗號分隔,例如 SalaryController 只有 FinanceHRManager 角色才能存取。

[Authorize(Roles = "HRManager,Finance")]
public class SalaryController : Controller
{
    public IActionResult Payslip() =>
                    Content("HRManager || Finance");
}

以上角色授權一樣可以針對 Action 去指定

[Authorize(Roles = "Administrator, PowerUser")]
public class ControlAllPanelController : Controller
{
    public IActionResult SetTime() =>
        Content("Administrator || PowerUser");

    [Authorize(Roles = "Administrator")]
    public IActionResult ShutDown() =>
        Content("Administrator only");
}

在上面的 ControlAllPanelControllerAdministratorPowerUser 角色可以存取 SetTime Action,但只有 Administrator 可以存取 ShutDown Action。


參考資料

ASP.NET Core授權簡介


上一篇
[Day15]- EF Core DB First
下一篇
[Day17]-防止跨網站腳本 (XSS) 攻擊
系列文
ASP.NET Core 30 天旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言