Uygulama rolleriApplication roles

GitHub Örnek kodGitHub Sample code

Uygulama rolleri, kullanıcılara izinler atamak için kullanılır.Application roles are used to assign permissions to users. Örneğin, [Tailspin Surveys] tailspin uygulama aşağıdaki rolleri tanımlar:For example, the Tailspin Surveys application defines the following roles:

  • Yönetici.Administrator. Bu kiracıya ait herhangi bir anket tüm CRUD işlemleri gerçekleştirebilirsiniz.Can perform all CRUD operations on any survey that belongs to that tenant.
  • Oluşturucu.Creator. Yeni anket oluşturabilirsiniz.Can create new surveys.
  • Okuyucu.Reader. Bu kiracıya ait herhangi bir anket okuyabilirsiniz.Can read any surveys that belong to that tenant.

Rolleri Sonuçta, izinleri sırasında çevrilmiş, gördüğünüz yetkilendirme.You can see that roles ultimately get translated into permissions, during authorization. Ancak, atamak ve rolleri yönetmek nasıl ilk soru şudur.But the first question is how to assign and manage roles. Üç ana seçenekten belirledik:We identified three main options:

Azure AD uygulama rolleri kullanarak rolleriRoles using Azure AD App Roles

Tailspin Surveys uygulaması içinde kullanılan yaklaşım budur.This is the approach that we used in the Tailspin Surveys app.

Bu yaklaşımda, SaaS sağlayıcısı, uygulama bildirimine eklenerek uygulama rolleri tanımlar.In this approach, The SaaS provider defines the application roles by adding them to the application manifest. Bir müşteri kaydolursa sonra Müşteri'nin AD dizini için yönetici kullanıcılar rollere izin atar.After a customer signs up, an admin for the customer's AD directory assigns users to the roles. Bir kullanıcı oturum açtığında, kullanıcının atanmış olan rolleri talepler olarak gönderilir.When a user signs in, the user's assigned roles are sent as claims.

Not

Azure AD Premium müşterinin, yönetici bir güvenlik grubu rol atayabilir ve uygulama rol grubunun üyelerini devralır.If the customer has Azure AD Premium, the admin can assign a security group to a role, and members of the group will inherit the app role. Grup sahibi bir AD Yöneticisi olması gerekmez çünkü rolleri yönetmek için kullanışlı bir yolu budur.This is a convenient way to manage roles, because the group owner doesn't need to be an AD admin.

Bu yaklaşımın avantajları:Advantages of this approach:

  • Basit bir programlama modeli.Simple programming model.
  • Uygulamaya özgü rolleridir.Roles are specific to the application. Rol talepleri için bir uygulama, başka bir uygulamaya gönderilmez.The role claims for one application are not sent to another application.
  • Müşterinin AD kiracısından bir uygulamayı kaldırırsa, rolleri kaldırıyor.If the customer removes the application from their AD tenant, the roles go away.
  • Uygulama, kullanıcının profilini okuma dışındaki tüm ek Active Directory izinlerini, gerek yoktur.The application doesn't need any extra Active Directory permissions, other than reading the user's profile.

Dezavantajları:Drawbacks:

  • Azure AD Premium olmayan müşteriler, güvenlik grupları rollere atayamazsınız.Customers without Azure AD Premium cannot assign security groups to roles. Bu müşteriler için bir AD yönetici tarafından tüm kullanıcı atamaları yapılmalıdır.For these customers, all user assignments must be done by an AD administrator.
  • Arka uç web API'si, web uygulamasından farklı olan varsa web uygulaması için rol atamalarını web API'si için geçerli değildir.If you have a backend web API, which is separate from the web app, then role assignments for the web app don't apply to the web API. Bu noktaya daha fazla bilgi için bkz. arka uç web API güvenliğini sağlama.For more discussion of this point, see Securing a backend web API.

UygulamaImplementation

Rolleri tanımlar.Define the roles. Uygulama rolleri, SaaS sağlayıcısı bildirir Uygulama bildirimi.The SaaS provider declares the app roles in the application manifest. Örneğin, anketler uygulama bildirim girişini İşte:For example, here is the manifest entry for the Surveys app:

"appRoles": [
  {
    "allowedMemberTypes": [
      "User"
    ],
    "description": "Creators can create Surveys",
    "displayName": "SurveyCreator",
    "id": "1b4f816e-5eaf-48b9-8613-7923830595ad",
    "isEnabled": true,
    "value": "SurveyCreator"
  },
  {
    "allowedMemberTypes": [
      "User"
    ],
    "description": "Administrators can manage the Surveys in their tenant",
    "displayName": "SurveyAdmin",
    "id": "c20e145e-5459-4a6c-a074-b942bbd4cfe1",
    "isEnabled": true,
    "value": "SurveyAdmin"
  }
],

value Özelliği rol talebi görünür.The value property appears in the role claim. id Özelliği tanımlanmış rolü için benzersiz tanımlayıcı.The id property is the unique identifier for the defined role. Yeni bir GUID değeri her zaman Oluştur id.Always generate a new GUID value for id.

Kullanıcıları atama.Assign users. Yeni bir müşteri kaydolduğunda uygulamayı müşterinin AD kiracısına kayıtlı.When a new customer signs up, the application is registered in the customer's AD tenant. Bu noktada, bu Kiracı için bir AD yönetim rolleri kullanıcılara atayabilirsiniz.At this point, an AD admin for that tenant can assign users to roles.

Not

Daha önce belirtildiği gibi Azure AD Premium ile müşteriler güvenlik grupları rollere da atayabilirsiniz.As noted earlier, customers with Azure AD Premium can also assign security groups to roles.

Anket uygulaması için kullanıcıları ve grupları Azure portalında aşağıdaki ekran gösterilir.The following screenshot from the Azure portal shows users and groups for the Survey application. Yönetici ve Creator sırasıyla SurveyAdmin ve SurveyCreator rollerine atanmış, gruplarıdır.Admin and Creator are groups, assigned to SurveyAdmin and SurveyCreator roles respectively. Alice doğrudan SurveyAdmin rolüne atanan bir kullanıcıdır.Alice is a user who was assigned directly to the SurveyAdmin role. Bob ve Charles doğrudan bir role atanmış değil kullanıcılardır.Bob and Charles are users that have not been directly assigned to a role.

Kullanıcılar ve Gruplar

He SurveyAdmin rol devralır aşağıdaki ekran görüntüsünde gösterildiği gibi Charles yönetici grubunun bir parçası olduğundan.As shown in the following screenshot, Charles is part of the Admin group, so he inherits the SurveyAdmin role. Bob söz konusu olduğunda, kendisinin bir rolü henüz atanmadı.In the case of Bob, he has not been assigned a role yet.

Yönetim grubu üyeleri

Not

Uygulamayı Azure AD Graph API'sini kullanarak program aracılığıyla, rolleri atamak için alternatif bir yoludur.An alternative approach is for the application to assign roles programmatically, using the Azure AD Graph API. Ancak, bu müşterinin AD dizini için yazma izinleri almak için uygulamayı gerektirir.However, this requires the application to obtain write permissions for the customer's AD directory. Bu izinlere sahip bir uygulama çok sayıda eylem olasılığını yapabilirsiniz — müşteri, uygulamanın kendi dizinini uğraşmanız değil güvenme.An application with those permissions could do a lot of mischief — the customer is trusting the app not to mess up their directory. Birçok müşteri, bu erişim düzeyi izni istemiyor olabilir.Many customers might be unwilling to grant this level of access.

Rol talepleri Al.Get role claims. Bir kullanıcı oturum açtığında, uygulama bir talep türü ile atanan kullanıcı rolleri alır http://schemas.microsoft.com/ws/2008/06/identity/claims/role.When a user signs in, the application receives the user's assigned role(s) in a claim with type http://schemas.microsoft.com/ws/2008/06/identity/claims/role.

Bir kullanıcı birden çok rol ya da hiçbir role sahip olabilir.A user can have multiple roles, or no role. Kullanıcının tam olarak bir rol talep yetkilendirme kodunuzda varsaymayın.In your authorization code, don't assume the user has exactly one role claim. Bunun yerine, belirli talep değeri mevcut olup olmadığını denetleyen bir kod yazın:Instead, write code that checks whether a particular claim value is present:

if (context.User.HasClaim(ClaimTypes.Role, "Admin")) { ... }

Azure AD güvenlik grupları'nı kullanarak rollerRoles using Azure AD security groups

Bu yaklaşımda, roller, AD güvenlik grupları temsil edilir.In this approach, roles are represented as AD security groups. Uygulama güvenlik grup üyeliklerini bağlı olarak kullanıcılara izinler atar.The application assigns permissions to users based on their security group memberships.

Avantajları:Advantages:

  • Azure AD Premium olmayan müşteriler, bu yaklaşım, rol atamalarını yönetmek için güvenlik grupları kullanmak müşterinin sağlar.For customers who do not have Azure AD Premium, this approach enables the customer to use security groups to manage role assignments.

Olumsuz:Disadvantages:

  • Karmaşıklığı.Complexity. Her Kiracı farklı grup talepleri gönderdiğinden, uygulama güvenlik grupları, her Kiracı için hangi uygulama rollerine karşılık gelen izlemek gerekir.Because every tenant sends different group claims, the app must keep track of which security groups correspond to which application roles, for each tenant.
  • Müşterinin AD kiracısından bir uygulamayı kaldırırsa, güvenlik grupları, AD dizininde kalır.If the customer removes the application from their AD tenant, the security groups are left in their AD directory.

UygulamaImplementation

Uygulama bildiriminde ayarlamak groupMembershipClaims "IDAP" özelliği.In the application manifest, set the groupMembershipClaims property to "SecurityGroup". Bu, Grup üyeliğini talep Azure AD'den almak için gereklidir.This is needed to get group membership claims from Azure AD.

{
   // ...
   "groupMembershipClaims": "SecurityGroup",
}

Yeni bir müşteri oturum açtığında uygulama tarafından gerekli rolleri için güvenlik grupları oluşturmak için bir müşteri uygulama bildirir.When a new customer signs up, the application instructs the customer to create security groups for the roles needed by the application. Müşteri, sonra grup nesne kimlikleri uygulamaya girmesi gerekir.The customer then needs to enter the group object IDs into the application. Uygulama bu Grup kimliklerini uygulama rolleri, Kiracı başına eşleyen bir tabloda depolar.The application stores these in a table that maps group IDs to application roles, per tenant.

Not

Alternatif olarak, uygulamanın Azure AD Graph API'sini kullanarak grupları programlı olarak de oluşturabilirsiniz.Alternatively, the application could create the groups programmatically, using the Azure AD Graph API. Bu, daha az hata yapmaya açık hale gelir.This would be less error prone. Ancak, "okuma ve yazma tüm grupları" almak için uygulamayı gerektirir müşterinin AD dizini için izinleri.However, it requires the application to obtain "read and write all groups" permissions for the customer's AD directory. Birçok müşteri, bu erişim düzeyi izni istemiyor olabilir.Many customers might be unwilling to grant this level of access.

Ne zaman bir kullanıcı oturum açtığında:When a user signs in:

  1. Uygulama, kullanıcının grupları talepler olarak alır.The application receives the user's groups as claims. Bir grubun nesne Kimliğini her talep değeridir.The value of each claim is the object ID of a group.
  2. Azure AD gruplarının belirtecinde gönderilen sayısını sınırlar.Azure AD limits the number of groups sent in the token. Grup sayısı bu sınırı aşarsa, özel bir "fazla kullanım" talep Azure AD'ye gönderir.If the number of groups exceeds this limit, Azure AD sends a special "overage" claim. Bu talep varsa, uygulama kullanıcının ait olduğu tüm grupların almak için Azure AD Graph API'si sorgulaması gerekir.If that claim is present, the application must query the Azure AD Graph API to get all of the groups to which that user belongs. Ayrıntılar için "Grupları, fazla kullanım talep" başlıklı bölümde hükme [yetkilendirme AD grupları kullanarak bulut uygulamalarındaki] bakın.For details, see [Authorization in Cloud Applications using AD Groups], under the section titled "Groups claim overage".
  3. ' % S'nesne kimlikleri kullanıcıya atamak için karşılık gelen uygulama rolleri bulmak için kendi veritabanında uygulama arar.The application looks up the object IDs in its own database, to find the corresponding application roles to assign to the user.
  4. Uygulamanın uygulama rolü ifade kullanıcı asıl adı için bir özel talep değeri ekler.The application adds a custom claim value to the user principal that expresses the application role. Örneğin: survey_role = "SurveyAdmin".For example: survey_role = "SurveyAdmin".

Yetkilendirme İlkeleri, özel rol talep grup talebi kullanmanız gerekir.Authorization policies should use the custom role claim, not the group claim.

Bir uygulama rolü Yöneticisi'ni kullanarak rolleriRoles using an application role manager

Bu yaklaşımda, uygulama rolleri Azure AD'de hiç depolanmaz.With this approach, application roles are not stored in Azure AD at all. Bunun yerine, uygulamanın kendi DB'de her kullanıcı için rol atamalarını depolar — örnek olarak, RoleManager ASP.NET ıdentity'de sınıfı.Instead, the application stores the role assignments for each user in its own DB — for example, using the RoleManager class in ASP.NET Identity.

Avantajları:Advantages:

  • Uygulama rolleri ve kullanıcı atamalarını üzerinde tam denetime sahiptir.The app has full control over the roles and user assignments.

Dezavantajları:Drawbacks:

  • Daha karmaşık, korumak daha zor.More complex, harder to maintain.
  • AD güvenlik grupları, rol atamalarını yönetmek için kullanamazsınız.Cannot use AD security groups to manage role assignments.
  • Kullanıcı bilgileri, kullanıcılar eklendiğinde veya kaldırıldığında olarak bu kiracının AD dizini ile eşitlenmemiş nereden uygulama veritabanında depolar.Stores user information in the application database, where it can get out of sync with the tenant's AD directory, as users are added or removed.

SonrakiNext