簡體   English   中英

Windows Azure基於角色的身份驗證(ACS)

[英]Windows Azure Role Based authentication (ACS)

我已經在Windows Azure Cloud上運行了Asp.net mvc4項目。 但是到目前為止,它還沒有任何用戶管理功能。 任何人都可以登錄(我有一個Windows Live單點登錄)。 但是現在我需要做基於角色的最簡單的身份驗證。

1.我想注冊用戶角色(管理員,用戶,內容管理員)/可以手動完成。 2.我需要根據用戶登錄時的角色對他們進行身份驗證。

任何人都可以給我提示,或者鏈接到清晰的教程,或者給我提出任何想法嗎?

最簡單的方法實際上是在ACS發行的令牌中添加“角色”聲明。 既然您說現在可以手動執行此操作,那么您將使用ACS門戶創建這些規則。

在您的應用中,您將執行通常的操作,例如使用“ Authorize”屬性裝飾動作,包括角色:

[Authorize(Roles="Administrator")]
public ActionResult Index()
{
  var b = User.IsInRole("Manager");
...
}

只要您使用“角色”聲明類型,一切都會起作用。 (這也可以自定義,但是可以通過這種方式立即使用)。

您將面臨的唯一挑戰是LiveID。 LiveID僅給您一個唯一的標識符。 您需要一種將標識符與已知用戶(例如電子郵件或姓名)進行映射的方法。 這通常需要兩步過程。 您首先進行身份驗證並獲得唯一的ID,然后要求用戶提供其信息並進行驗證(例如,通過發送電子郵件)。

使用任何其他身份提供程序,您都不會遇到此問題,因為它們都給您提供了電子郵件和名稱。

編寫上述規則很容易:

  • 電子郵件:joy@mail.com->角色:管理員
  • 電子郵件:someone@mail.com->角色:經理...

如果您有更多的用戶或更多的規則,則門戶通常不再實用,並且您將需要其他功能(例如,使用應用程序中的API,使用腳本,使用auth10之類的工具等)。

我為項目解決該問題的方法是添加ClaimsAuthenticationManager並將用戶角色添加到那里的身份中。

namespace Claims
{
  public class RoleClaimsAuthenticationManager : ClaimsAuthenticationManager

    public override ClaimsPrincipal Authenticate(string resourceName, ClaimsPrincipal incomingPrincipal)
    {
        if (incomingPrincipal != null && incomingPrincipal.Identity.IsAuthenticated)
        {
            var identity = (ClaimsIdentity)incomingPrincipal.Identity;
            var roles = getRolesForIdentity(identity); //Get the roles for your identity here
            foreach (var r in roles)
            {
                 identity.AddClaim(new Claim(ClaimTypes.Role, r.Name));
            }
        }

        return base.Authenticate(resourceName, incomingPrincipal);
    }
}

然后將其連接到system.identityModel -> identityConfiguration部分的配置中

<claimsAuthenticationManager type="Claims.RoleClaimsAuthenticationManager, Claims" />

您可能已經注意到ACS負責身份驗證而不是授權,因此您需要自己處理。

最簡單的方法是每次有新用戶連接時在應用程序中創建一個“配置文件”。 為特定用戶創建配置文件時,您需要將身份提供者和該用戶的名稱與配置文件一起存儲。 存儲此信息將使您下次連接該用戶時可以獲取該用戶的配置文件(您將從聲明中獲取此信息,但這取決於您配置ACS的方式)。

對於完整的示例,您應該查看BlobShare應用程序的源代碼(使用身份驗證和授權)。

除ACS之外的一種選擇是會員服務。

會員簡介

使用會員服務,您既可以進行身份​​驗證也可以進行授權。 成員資格具有角色,您甚至可以在web.config中使用角色。

ACS並不是一個不錯的選擇。 我只提出另一種選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM