Funções da aplicaçãoApplication roles

Código de exemplo do GitHubGitHub Sample code

Funções de aplicação são utilizadas para atribuir permissões a utilizadores.Application roles are used to assign permissions to users. Por exemplo, o [Tailspin Surveys] tailspin aplicativo define as seguintes funções:For example, the Tailspin Surveys application defines the following roles:

  • Administrador.Administrator. Pode efetuar todas as operações de CRUD em qualquer pesquisa que pertence a esse inquilino.Can perform all CRUD operations on any survey that belongs to that tenant.
  • Criador.Creator. Pode criar pesquisas de novo.Can create new surveys.
  • Leitor.Reader. Pode ler qualquer pesquisas que pertencem a esse inquilino.Can read any surveys that belong to that tenant.

Pode ver que funções, por fim, ser traduzidas em permissões, durante autorização.You can see that roles ultimately get translated into permissions, during authorization. Mas a primeira pergunta é como atribuir e gerir funções.But the first question is how to assign and manage roles. Identificámos três opções principais:We identified three main options:

Funções através de funções de aplicação do Azure ADRoles using Azure AD App Roles

Essa é a abordagem que usamos na aplicação Tailspin Surveys.This is the approach that we used in the Tailspin Surveys app.

Nesta abordagem, o fornecedor de SaaS a define as funções de aplicação ao adicioná-los para o manifesto do aplicativo.In this approach, The SaaS provider defines the application roles by adding them to the application manifest. Depois de um cliente se inscreve, um administrador para o diretório do AD do cliente atribui aos usuários as funções.After a customer signs up, an admin for the customer's AD directory assigns users to the roles. Quando um utilizador inicia sessão, as funções do usuário atribuído são enviadas como afirmações.When a user signs in, the user's assigned roles are sent as claims.

Nota

Se o cliente tem o Azure AD Premium, o administrador pode atribuir um grupo de segurança a uma função e membros do grupo herdará a função de aplicação.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. Esta é uma forma conveniente de gerir funções, porque o proprietário do grupo não precisa de ser um administrador do AD.This is a convenient way to manage roles, because the group owner doesn't need to be an AD admin.

Vantagens desta abordagem:Advantages of this approach:

  • Modelo de programação simples.Simple programming model.
  • Funções são específicas para a aplicação.Roles are specific to the application. As declarações de função para um aplicativo não são enviadas para outro aplicativo.The role claims for one application are not sent to another application.
  • Se o cliente remove a aplicação do seu inquilino do AD, as funções desaparecer.If the customer removes the application from their AD tenant, the roles go away.
  • A aplicação não tem quaisquer permissões Extras do Active Directory, que não seja de ler o perfil do usuário.The application doesn't need any extra Active Directory permissions, other than reading the user's profile.

Desvantagens:Drawbacks:

  • Os clientes sem o Azure AD Premium não é possível atribuir grupos de segurança para as funções.Customers without Azure AD Premium cannot assign security groups to roles. Para esses clientes, todas as atribuições de utilizador devem ser feitas por um administrador do AD.For these customers, all user assignments must be done by an AD administrator.
  • Se tiver uma API, o que é separada da aplicação web, da web de back-end, em seguida, atribuições de funções para a aplicação web não se aplicam para a API web.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. Para obter mais discussões deste ponto, consulte proteger uma API da web de back-end.For more discussion of this point, see Securing a backend web API.

ImplementaçãoImplementation

Defina as funções.Define the roles. O fornecedor de SaaS declara as funções de aplicação na manifesto do aplicativo.The SaaS provider declares the app roles in the application manifest. Por exemplo, eis a entrada do manifesto da aplicação de inquéritos: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"
  }
],

O value propriedade aparece na declaração de função.The value property appears in the role claim. O id propriedade é o identificador exclusivo para a função definida.The id property is the unique identifier for the defined role. Sempre gerar um novo valor GUID para id.Always generate a new GUID value for id.

Atribuir utilizadores.Assign users. Quando um novo cliente que se inscreve no, a aplicação fica registada no inquilino do AD do cliente.When a new customer signs up, the application is registered in the customer's AD tenant. Neste momento, um administrador do AD para esse inquilino pode atribuir utilizadores a funções.At this point, an AD admin for that tenant can assign users to roles.

Nota

Conforme observado anteriormente, os clientes com o Azure AD Premium também podem atribuir grupos de segurança para as funções.As noted earlier, customers with Azure AD Premium can also assign security groups to roles.

A seguinte captura de ecrã do portal do Azure mostra utilizadores e grupos para o aplicativo de pesquisa.The following screenshot from the Azure portal shows users and groups for the Survey application. Administrador e criador são grupos, atribuídos às funções de SurveyAdmin e SurveyCreator, respetivamente.Admin and Creator are groups, assigned to SurveyAdmin and SurveyCreator roles respectively. Alice é um utilizador a quem foi atribuída diretamente para a função de SurveyAdmin.Alice is a user who was assigned directly to the SurveyAdmin role. BOB e Charles são os utilizadores que não foram atribuídos diretamente a uma função.Bob and Charles are users that have not been directly assigned to a role.

Utilizadores e Grupos

Conforme mostrado na captura de ecrã seguinte, o Charles faz parte do grupo de administradores, para que ele herda a função de SurveyAdmin.As shown in the following screenshot, Charles is part of the Admin group, so he inherits the SurveyAdmin role. No caso de Bob, ele não foi atribuído uma função ainda.In the case of Bob, he has not been assigned a role yet.

Membros do grupo de administrador

Nota

É uma abordagem alternativa para a aplicação atribuir funções através de programação, com o Azure AD Graph API.An alternative approach is for the application to assign roles programmatically, using the Azure AD Graph API. No entanto, requer que a aplicação para obter permissões de escrita para o diretório do AD do cliente.However, this requires the application to obtain write permissions for the customer's AD directory. Uma aplicação com essas permissões poderia fazer muita danos — o cliente é confiar a aplicação não bagunçar o seu diretório.An application with those permissions could do a lot of mischief — the customer is trusting the app not to mess up their directory. Muitos clientes poderão não pretender conceder esse nível de acesso.Many customers might be unwilling to grant this level of access.

Obter afirmações de função.Get role claims. Quando um utilizador inicia sessão, o aplicativo recebe de funções atribuídas do usuário numa afirmação com o tipo 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.

Um utilizador pode ter múltiplas funções, ou nenhuma função.A user can have multiple roles, or no role. Em seu código de autorização, não presuma que o utilizador tem exatamente uma função de afirmações.In your authorization code, don't assume the user has exactly one role claim. Em vez disso, escreva um código que verifica se existe um valor de afirmação específico:Instead, write code that checks whether a particular claim value is present:

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

Funções usando grupos de segurança do Azure ADRoles using Azure AD security groups

Nesta abordagem, as funções são representadas como grupos de segurança do AD.In this approach, roles are represented as AD security groups. O aplicativo atribui permissões para utilizadores com base em suas associações de grupo de segurança.The application assigns permissions to users based on their security group memberships.

Vantagens:Advantages:

  • Para os clientes que não tenham o Azure AD Premium, esta abordagem permite que o cliente utilizar grupos de segurança para gerir atribuições de funções.For customers who do not have Azure AD Premium, this approach enables the customer to use security groups to manage role assignments.

Desvantagens:Disadvantages:

  • Complexidade.Complexity. Uma vez que cada inquilino envia declarações de grupo diferente, a aplicação deve manter um registo de que grupos de segurança correspondem às quais funções de aplicação, para cada inquilino.Because every tenant sends different group claims, the app must keep track of which security groups correspond to which application roles, for each tenant.
  • Se o cliente remove a aplicação do seu inquilino do AD, os grupos de segurança são deixados em seu diretório do AD.If the customer removes the application from their AD tenant, the security groups are left in their AD directory.

ImplementaçãoImplementation

No manifesto do aplicativo, defina o groupMembershipClaims propriedade ao "SecurityGroup".In the application manifest, set the groupMembershipClaims property to "SecurityGroup". Isto é necessário obter afirmações de associação de grupo do AAD.This is needed to get group membership claims from AAD.

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

Quando um novo cliente inscreve o tempo limite, o aplicativo instrui o cliente para criar grupos de segurança para as funções necessárias pela aplicação.When a new customer signs up, the application instructs the customer to create security groups for the roles needed by the application. O cliente, em seguida, tem de introduzir os IDs de objeto de grupo no aplicativo.The customer then needs to enter the group object IDs into the application. A aplicação armazena numa tabela que mapeia os IDs de grupo para funções de aplicação, por inquilino.The application stores these in a table that maps group IDs to application roles, per tenant.

Nota

Em alternativa, o aplicativo foi possível criar os grupos por meio de programação, com o Azure AD Graph API.Alternatively, the application could create the groups programmatically, using the Azure AD Graph API. Isso seria menos propenso a erros.This would be less error prone. No entanto, ele requer que o aplicativo para obter "ler e escrever todos os grupos" permissões para o diretório do AD do cliente.However, it requires the application to obtain "read and write all groups" permissions for the customer's AD directory. Muitos clientes poderão não pretender conceder esse nível de acesso.Many customers might be unwilling to grant this level of access.

Quando um utilizador inicia sessão:When a user signs in:

  1. O aplicativo recebe grupos do utilizador como afirmações.The application receives the user's groups as claims. O valor de cada afirmação é o ID de objeto de um grupo.The value of each claim is the object ID of a group.
  2. O Azure AD limita o número de grupos enviados no token.Azure AD limits the number of groups sent in the token. Se o número de grupos exceder este limite, o Azure AD envia uma afirmação de "utilização excedida" especial.If the number of groups exceeds this limit, Azure AD sends a special "overage" claim. Se essa declaração estiver presente, o aplicativo deve consultar o Azure AD Graph API para obter todos os grupos a que pertence esse utilizador.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. Para obter detalhes, veja [autorização nas aplicações na Cloud através de grupos do AD], na seção denominada "Grupos de reclamação excedido".For details, see [Authorization in Cloud Applications using AD Groups], under the section titled "Groups claim overage".
  3. O aplicativo procura o IDs de objeto na sua própria base de dados, para encontrar as funções de aplicação correspondente para atribuir ao utilizador.The application looks up the object IDs in its own database, to find the corresponding application roles to assign to the user.
  4. A aplicação adiciona um valor de afirmação personalizadas para o principal de utilizador que expresse a função de aplicação.The application adds a custom claim value to the user principal that expresses the application role. Por exemplo: survey_role = "SurveyAdmin".For example: survey_role = "SurveyAdmin".

Políticas de autorização devem utilizar a afirmação de função personalizada, não o grupo de afirmação.Authorization policies should use the custom role claim, not the group claim.

Utilizar um Gestor de funções de aplicação de funçõesRoles using an application role manager

Com esta abordagem, funções de aplicação não são armazenadas no Azure AD de todo.With this approach, application roles are not stored in Azure AD at all. Em vez disso, a aplicação armazena as atribuições de funções para cada utilizador no seu próprio DB — por exemplo, utilizando o RoleManager classe no ASP.NET Identity.Instead, the application stores the role assignments for each user in its own DB — for example, using the RoleManager class in ASP.NET Identity.

Vantagens:Advantages:

  • A aplicação ter controlo total sobre as funções e as atribuições do utilizador.The app has full control over the roles and user assignments.

Desvantagens:Drawbacks:

  • Mais complexas, mais difícil de manter.More complex, harder to maintain.
  • Não é possível utilizar grupos de segurança do AD para gerir atribuições de funções.Cannot use AD security groups to manage role assignments.
  • Armazena informações de utilizador da base de dados do aplicativo, onde ele pode ficar dessincronizado com o diretório do AD do inquilino, como os utilizadores são adicionados ou removidos.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.

PróximaNext