Authentification des utilisateurs avec une base de données de Document Azure Cosmos DBAuthenticating Users with an Azure Cosmos DB Document Database

Télécharger l’exemple télécharger l’exempleDownload Sample Download the sample

Bases de données de document Azure Cosmos DB prend en charge les collections partitionnées, ce qui peuvent s’étendre sur plusieurs serveurs et des partitions, tout en aidant le débit et stockage illimité. Cet article explique comment combiner de contrôle d’accès avec les collections partitionnées, afin qu’un utilisateur peut accéder uniquement à leurs propres documents dans une application Xamarin.Forms.Azure Cosmos DB document databases support partitioned collections, which can span multiple servers and partitions, while supporting unlimited storage and throughput. This article explains how to combine access control with partitioned collections, so that a user can only access their own documents in a Xamarin.Forms application.

Vue d'ensembleOverview

Une clé de partition doit être spécifiée lors de la création d’une collection partitionnée, et les documents avec la même clé de partition sont stockés dans la même partition.A partition key must be specified when creating a partitioned collection, and documents with the same partition key will be stored in the same partition. Par conséquent, spécification de l’identité de l’utilisateur comme clé de partition entraîne une collection partitionnée qui stocke uniquement des documents pour cet utilisateur.Therefore, specifying the user's identity as a partition key will result in a partitioned collection that will only store documents for that user. Cela garantit également que la base de données de document Azure Cosmos DB sera mise à l’échelle en tant que le nombre d’utilisateurs et augmenter les éléments.This also ensures that the Azure Cosmos DB document database will scale as the number of users and items increase.

L’accès doit être accordé à n’importe quelle collection, et le modèle de contrôle d’accès API SQL définit deux types de construction d’accès :Access must be granted to any collection, and the SQL API access control model defines two types of access constructs:

  • Clés principales activer l’accès administratif complet à toutes les ressources au sein d’un compte Cosmos DB et sont créés lorsqu’un compte Cosmos DB est créé.Master keys enable full administrative access to all resources within a Cosmos DB account, and are created when a Cosmos DB account is created.
  • Les jetons de ressource capturent la relation entre l’utilisateur d’une base de données et l’autorisation de l’utilisateur dispose d’une ressource de Cosmos DB spécifique, tel qu’une collection ou un document.Resource tokens capture the relationship between the user of a database and the permission the user has for a specific Cosmos DB resource, such as a collection or a document.

Exposition d’une clé principale, le risque d’utilisation malveillante ou négligente un compte Cosmos DB s’ouvre.Exposing a master key opens a Cosmos DB account to the possibility of malicious or negligent use. Toutefois, les jetons de ressource Azure Cosmos DB fournissent un mécanisme sécurisé pour autorisant les clients à lire, écrire et supprimer des ressources spécifiques dans un compte Azure Cosmos DB en fonction des autorisations accordées.However, Azure Cosmos DB resource tokens provide a safe mechanism for allowing clients to read, write, and delete specific resources in an Azure Cosmos DB account according to the granted permissions.

Une approche courante à la demande, génération et l’envoi des jetons de ressource à une application mobile consiste à utiliser un répartiteur de jetons de ressource.A typical approach to requesting, generating, and delivering resource tokens to a mobile application is to use a resource token broker. Le diagramme suivant montre une vue d’ensemble de la façon dont l’exemple d’application utilise un répartiteur de jetons de ressource pour gérer l’accès aux données de base de données de document :The following diagram shows a high-level overview of how the sample application uses a resource token broker to manage access to the document database data:

Le répartiteur de jetons de ressource est un service API Web de niveau intermédiaire, hébergé dans Azure App Service, qui possède la clé principale du compte Cosmos DB.The resource token broker is a mid-tier Web API service, hosted in Azure App Service, which possesses the master key of the Cosmos DB account. L’exemple d’application utilise le répartiteur de jetons de ressource pour gérer l’accès aux données de base de données de document comme suit :The sample application uses the resource token broker to manage access to the document database data as follows:

  1. Lors de la connexion, l’application Xamarin.Forms contacte Azure App Service pour lancer un flux d’authentification.On login, the Xamarin.Forms application contacts Azure App Service to initiate an authentication flow.
  2. Azure App Service effectue un flux d’authentification OAuth avec Facebook.Azure App Service performs an OAuth authentication flow with Facebook. Une fois le flux d’authentification terminée, l’application Xamarin.Forms reçoit un jeton d’accès.After the authentication flow completes, the Xamarin.Forms application receives an access token.
  3. L’application Xamarin.Forms utilise le jeton d’accès pour demander un jeton de ressource du répartiteur de jetons de ressource.The Xamarin.Forms application uses the access token to request a resource token from the resource token broker.
  4. Le répartiteur de jetons de ressource utilise le jeton d’accès pour demander l’identité de l’utilisateur à partir de Facebook.The resource token broker uses the access token to request the user's identity from Facebook. Identité de l’utilisateur est ensuite utilisée pour demander un jeton de ressource à partir de Cosmos DB, qui est utilisé pour accorder l’accès en lecture/écriture à la collection partitionnée de l’utilisateur authentifié.The user's identity is then used to request a resource token from Cosmos DB, which is used to grant read/write access to the authenticated user's partitioned collection.
  5. L’application Xamarin.Forms utilise le jeton de ressource pour accéder directement aux ressources Cosmos DB avec les autorisations définies par le jeton de ressource.The Xamarin.Forms application uses the resource token to directly access Cosmos DB resources with the permissions defined by the resource token.

Notes

Lorsque le jeton de ressource expire, demandes de base de données de document suivants reçoit une exception non autorisée 401.When the resource token expires, subsequent document database requests will receive a 401 unauthorized exception. À ce stade, les applications Xamarin.Forms doivent rétablir l’identité et de demander un nouveau jeton de ressource.At this point, Xamarin.Forms applications should re-establish the identity and request a new resource token.

Pour plus d’informations sur le partitionnement Cosmos DB, consultez la partition et mise à l’échelle dans Azure Cosmos DB.For more information about Cosmos DB partitioning, see How to partition and scale in Azure Cosmos DB. Pour plus d’informations sur le contrôle d’accès Cosmos DB, consultez sécurisation de l’accès aux données Cosmos DB et contrôle d’accès dans l’API SQL.For more information about Cosmos DB access control, see Securing access to Cosmos DB data and Access control in the SQL API.

InstallationSetup

Le processus permettant d’intégrer le répartiteur de jetons de ressource à une application Xamarin.Forms est comme suit :The process for integrating the resource token broker into a Xamarin.Forms application is as follows:

  1. Créez un compte Cosmos DB qui utilise le contrôle d’accès.Create a Cosmos DB account that will use access control. Pour plus d’informations, consultez Cosmos DB Configuration.For more information, see Cosmos DB Configuration.
  2. Créez un Service d’application Azure pour héberger le répartiteur de jetons de ressource.Create an Azure App Service to host the resource token broker. Pour plus d’informations, consultez Configuration d’Azure App Service.For more information, see Azure App Service Configuration.
  3. Créer une application Facebook pour effectuer l’authentification.Create a Facebook app to perform authentication. Pour plus d’informations, consultez Configuration de l’application Facebook.For more information, see Facebook App Configuration.
  4. Configurer le Service d’application Azure pour effectuer une authentification simple avec Facebook.Configure the Azure App Service to perform easy authentication with Facebook. Pour plus d’informations, consultez Configuration d’Azure App Service d’authentification.For more information, see Azure App Service Authentication Configuration.
  5. Configurer l’exemple d’application Xamarin.Forms pour communiquer avec Azure App Service et Cosmos DB.Configure the Xamarin.Forms sample application to communicate with Azure App Service and Cosmos DB. Pour plus d’informations, consultez Configuration de l’Application Xamarin.Forms.For more information, see Xamarin.Forms Application Configuration.

Configuration d’Azure Cosmos DBAzure Cosmos DB Configuration

Le processus de création d’un compte Cosmos DB qui utilise le contrôle d’accès est la suivante :The process for creating a Cosmos DB account that will use access control is as follows:

  1. Créez un compte Cosmos DB.Create a Cosmos DB account. Pour plus d’informations, consultez créer un compte Azure Cosmos DB.For more information, see Create an Azure Cosmos DB account.
  2. Dans le compte Cosmos DB, créez une nouvelle collection appelée UserItems, en spécifiant une clé de partition de /userid.In the Cosmos DB account, create a new collection named UserItems, specifying a partition key of /userid.

Configuration d’Azure App ServiceAzure App Service Configuration

Le processus pour l’hébergement de la ressource token broker dans Azure App Service est la suivante :The process for hosting the resource token broker in Azure App Service is as follows:

  1. Dans le portail Azure, créez une nouvelle application web app Service.In the Azure portal, create a new App Service web app. Pour plus d’informations, consultez créer une application web dans un environnement App Service.For more information, see Create a web app in an App Service Environment.

  2. Dans le portail Azure, ouvrez le panneau de paramètres d’application pour l’application web et ajoutez les paramètres suivants :In the Azure portal, open the App Settings blade for the web app, and add the following settings:

    • accountUrl – la valeur doit être l’URL du compte Cosmos DB à partir du panneau clés du compte Cosmos DB.accountUrl – the value should be the Cosmos DB account URL from the Keys blade of the Cosmos DB account.
    • accountKey – la valeur doit être la clé principale Cosmos DB (principale ou secondaire) à partir du panneau clés du compte Cosmos DB.accountKey – the value should be the Cosmos DB master key (primary or secondary) from the Keys blade of the Cosmos DB account.
    • databaseId – la valeur doit être le nom de la base de données Cosmos DB.databaseId – the value should be the name of the Cosmos DB database.
    • collectionId – la valeur doit être le nom de la collection Cosmos DB (dans ce cas, UserItems).collectionId – the value should be the name of the Cosmos DB collection (in this case, UserItems).
    • hostUrl – la valeur doit être l’URL de l’application web à partir du Panneau de vue d’ensemble du compte de Service de l’application.hostUrl – the value should be the URL of the web app from the Overview blade of the App Service account.

    La capture d’écran suivante illustre cette configuration :The following screenshot demonstrates this configuration:

  3. Publiez la solution de service Broker pour les jetons de ressource à l’application web Azure App Service.Publish the resource token broker solution to the Azure App Service web app.

Configuration de l’application FacebookFacebook App Configuration

Le processus de création d’une application Facebook pour exécuter l’authentification est comme suit :The process for creating a Facebook app to perform authentication is as follows:

  1. Créer une application Facebook.Create a Facebook app. Pour plus d’informations, consultez inscrire et configurer une application sur le Centre pour développeurs Facebook.For more information, see Register and Configure an App on the Facebook Developer Center.
  2. Ajouter le produit de la connexion Facebook à l’application.Add the Facebook Login product to the app. Pour plus d’informations, consultez ajouter un compte de connexion Facebook à votre application ou site Web sur le Centre pour développeurs Facebook.For more information, see Add Facebook Login to Your App or Website on the Facebook Developer Center.
  3. Configurez une connexion Facebook comme suit :Configure Facebook Login as follows:
  • Activer la connexion de Client OAuth.Enable Client OAuth Login.
  • Activer la connexion de OAuth Web.Enable Web OAuth Login.
  • Définir l’URI à l’URI de l’application web app Service, de redirection OAuth valides avec /.auth/login/facebook/callback ajouté.Set the Valid OAuth redirect URI to the URI of the App Service web app, with /.auth/login/facebook/callback appended.

La capture d’écran suivante illustre cette configuration :The following screenshot demonstrates this configuration:

Pour plus d’informations, consultez inscrire votre application avec Facebook.For more information, see Register your application with Facebook.

Configuration de l’authentification Azure App ServiceAzure App Service Authentication Configuration

Le processus de configuration de l’authentification simple d’App Service est la suivante :The process for configuring App Service easy authentication is as follows:

  1. Dans le portail Azure, accédez à l’application web app Service.In the Azure Portal, navigate to the App Service web app.
  2. Dans le portail Azure, ouvrez l’authentification / panneau autorisation et d’effectuer la configuration suivante :In the Azure Portal, open the Authentication / Authorization blade and perform the following configuration:
  • L’authentification App Service doit être activée.App Service Authentication should be turned on.
  • L’action à entreprendre lorsqu’une demande n’est pas authentifiée doit être définie sur connexion avec Facebook.The action to take when a request is not authenticated should be set to Login in with Facebook.

La capture d’écran suivante illustre cette configuration :The following screenshot demonstrates this configuration:

L’application web app Service doit également être configuré pour communiquer avec l’application Facebook pour activer le flux d’authentification.The App Service web app should also be configured to communicate with the Facebook app to enable the authentication flow. Cela est possible en sélectionnant le fournisseur d’identité Facebook et en entrant le ID d’application et Secret d’application valeurs à partir des paramètres d’application Facebook sur le Centre pour développeurs Facebook.This can be accomplished by selecting the Facebook identity provider, and entering the App ID and App Secret values from the Facebook app settings on the Facebook Developer Center. Pour plus d’informations, consultez Facebook ajouter des informations à votre application.For more information, see Add Facebook information to your application.

Configuration de l’Application Xamarin.FormsXamarin.Forms Application Configuration

Le processus de configuration de l’exemple d’application Xamarin.Forms est comme suit :The process for configuring the Xamarin.Forms sample application is as follows:

  1. Ouvrez la solution Xamarin.Forms.Open the Xamarin.Forms solution.
  2. Ouvrez Constants.cs et mettre à jour les valeurs des constantes suivantes :Open Constants.cs and update the values of the following constants:
  • EndpointUri – la valeur doit être l’URL du compte Cosmos DB à partir du panneau clés du compte Cosmos DB.EndpointUri – the value should be the Cosmos DB account URL from the Keys blade of the Cosmos DB account.
  • DatabaseName – la valeur doit être le nom de la base de données de document.DatabaseName – the value should be the name of the document database.
  • CollectionName – la valeur doit être le nom de la collection de base de données de document (dans ce cas, UserItems).CollectionName – the value should be the name of the document database collection (in this case, UserItems).
  • ResourceTokenBrokerUrl – la valeur doit être l’URL de l’application de web de répartition des jetons de ressource à partir du Panneau de vue d’ensemble du compte de Service de l’application.ResourceTokenBrokerUrl – the value should be the URL of the resource token broker web app from the Overview blade of the App Service account.

Lancement de connexionInitiating Login

L’exemple d’application lance le processus de connexion à l’aide de Xamarin.Auth pour rediriger un navigateur vers une URL de fournisseur d’identité, comme illustré dans l’exemple de code suivant :The sample application initiates the login process by using Xamarin.Auth to redirect a browser to an identity provider URL, as demonstrated in the following example code:

var auth = new Xamarin.Auth.WebRedirectAuthenticator(
  new Uri(Constants.ResourceTokenBrokerUrl + "/.auth/login/facebook"),
  new Uri(Constants.ResourceTokenBrokerUrl + "/.auth/login/done"));

Cela entraîne un flux d’authentification OAuth devant être initialisée entre Azure App Service et Facebook, qui affiche la page de connexion Facebook :This causes an OAuth authentication flow to be initiated between Azure App Service and Facebook, which displays the Facebook login page:

La connexion peut être annulée en appuyant sur la Annuler bouton sur iOS ou en appuyant sur la retour bouton sur Android, auquel cas l’utilisateur reste non authentifiée et l’interface utilisateur du fournisseur identité est supprimé de l’écran.The login can be cancelled by pressing the Cancel button on iOS or by pressing the Back button on Android, in which case the user remains unauthenticated and the identity provider user interface is removed from the screen.

Pour plus d’informations sur Xamarin.Auth, consultez authentification des utilisateurs avec un fournisseur d’identité.For more information about Xamarin.Auth, see Authenticating Users with an Identity Provider.

Obtention d’un jeton de ressourceObtaining a Resource Token

Après l’authentification réussie, le WebRedirectAuthenticator.Completed se déclenche des événements.Following successful authentication, the WebRedirectAuthenticator.Completed event fires. L’exemple de code suivant illustre la gestion de cet événement :The following code example demonstrates handling this event:

auth.Completed += async (sender, e) =>
{
  if (e.IsAuthenticated && e.Account.Properties.ContainsKey("token"))
  {
    var easyAuthResponseJson = JsonConvert.DeserializeObject<JObject>(e.Account.Properties["token"]);
    var easyAuthToken = easyAuthResponseJson.GetValue("authenticationToken").ToString();

    // Call the ResourceBroker to get the resource token
    using (var httpClient = new HttpClient())
    {
      httpClient.DefaultRequestHeaders.Add("x-zumo-auth", easyAuthToken);
      var response = await httpClient.GetAsync(Constants.ResourceTokenBrokerUrl + "/api/resourcetoken/");
      var jsonString = await response.Content.ReadAsStringAsync();
      var tokenJson = JsonConvert.DeserializeObject<JObject>(jsonString);
      resourceToken = tokenJson.GetValue("token").ToString();
      UserId = tokenJson.GetValue("userid").ToString();

      if (!string.IsNullOrWhiteSpace(resourceToken))
      {
        client = new DocumentClient(new Uri(Constants.EndpointUri), resourceToken);
        ...
      }
      ...
    }
  }
};

Le résultat d’une authentification réussie est un jeton d’accès, qui est disponible AuthenticatorCompletedEventArgs.Account propriété.The result of a successful authentication is an access token, which is available AuthenticatorCompletedEventArgs.Account property. Le jeton d’accès est extraites et utilisé dans une demande GET auprès de la ressource token broker resourcetoken API.The access token is extracted and used in a GET request to the resource token broker's resourcetoken API.

Le resourcetoken API utilise le jeton d’accès pour demander l’identité de l’utilisateur à partir de Facebook, qui à son tour, est utilisé pour demander un jeton de ressource à partir de Cosmos DB.The resourcetoken API uses the access token to request the user's identity from Facebook, which in turn is used to request a resource token from Cosmos DB. Si un document d’autorisation valide existe déjà pour l’utilisateur dans la base de données de document, il est récupéré et un document JSON contenant le jeton de ressource est retourné à l’application Xamarin.Forms.If a valid permission document already exists for the user in the document database, it's retrieved and a JSON document containing the resource token is returned to the Xamarin.Forms application. Si un document d’autorisation valide n’existe pas pour l’utilisateur, un utilisateur et l’autorisation est créé dans la base de données de document et le jeton de ressource est extraite à partir du document d’autorisation et retourné à l’application Xamarin.Forms dans un document JSON.If a valid permission document doesn't exist for the user, a user and permission is created in the document database, and the resource token is extracted from the permission document and returned to the Xamarin.Forms application in a JSON document.

Notes

Un utilisateur de base de données de document est une ressource associée à une base de données de document, et chaque base de données peut contenir zéro ou plusieurs utilisateurs.A document database user is a resource associated with a document database, and each database may contain zero or more users. Une autorisation de base de données de document est une ressource associée à un utilisateur de base de données de document, et chaque utilisateur peut contenir zéro ou plusieurs autorisations.A document database permission is a resource associated with a document database user, and each user may contain zero or more permissions. Une ressource d’autorisation donne accès à un jeton de sécurité nécessitant l’utilisateur lorsque vous tentez d’accéder à une ressource telle qu’un document.A permission resource provides access to a security token that the user requires when attempting to access a resource such as a document.

Si le resourcetoken API se termine avec succès, il enverra un code d’état HTTP 200 (OK) dans la réponse, ainsi que d’un document JSON contenant le jeton de ressource.If the resourcetoken API successfully completes, it will send HTTP status code 200 (OK) in the response, along with a JSON document containing the resource token. Les données JSON suivantes affiche un message de réponse correcte classique :The following JSON data shows a typical successful response message:

{
  "id": "John Smithpermission",
  "token": "type=resource&ver=1&sig=zx6k2zzxqktzvuzuku4b7y==;a74aukk99qtwk8v5rxfrfz7ay7zzqfkbfkremrwtaapvavw2mrvia4umbi/7iiwkrrq+buqqrzkaq4pp15y6bki1u//zf7p9x/aefbvqvq3tjjqiffurfx+vexa1xarxkkv9rbua9ypfzr47xpp5vmxuvzbekkwq6txme0xxxbjhzaxbkvzaji+iru3xqjp05amvq1r1q2k+qrarurhmjzah/ha0evixazkve2xk1zu9u/jpyf1xrwbkxqpzebvqwma+hyyaazemr6qx9uz9be==;",
  "expires": 4035948,
  "userid": "John Smith"
}

Le WebRedirectAuthenticator.Completed Gestionnaire d’événements lit la réponse à partir de la resourcetoken API et extrait le jeton de ressource et l’id d’utilisateur. Le jeton de ressource est ensuite transmis en tant qu’argument à la DocumentClient constructeur, qui encapsule le point de terminaison, les informations d’identification et les stratégies de connexion utilisé pour accéder à Cosmos DB et est utilisé pour configurer et exécuter des requêtes Cosmos DB.The WebRedirectAuthenticator.Completed event handler reads the response from the resourcetoken API and extracts the resource token and the user id. The resource token is then passed as an argument to the DocumentClient constructor, which encapsulates the endpoint, credentials, and connection policy used to access Cosmos DB, and is used to configure and execute requests against Cosmos DB. Le jeton de ressource est envoyé avec chaque demande directement accéder à une ressource et indique que l’accès en lecture/écriture à la collection partitionnée de l’utilisateur authentifié est accordé.The resource token is sent with each request to directly access a resource, and indicates that read/write access to the authenticated users' partitioned collection is granted.

Récupération de DocumentsRetrieving Documents

Récupération de documents qui appartiennent uniquement à l’utilisateur authentifié peut être obtenue en créant une requête de document qui inclut l’id d’utilisateur comme clé de partition, est illustrée dans l’exemple de code suivant :Retrieving documents that only belong to the authenticated user can be achieved by creating a document query that includes the user's id as a partition key, and is demonstrated in the following code example:

var query = client.CreateDocumentQuery<TodoItem>(collectionLink,
                        new FeedOptions
                        {
                          MaxItemCount = -1,
                          PartitionKey = new PartitionKey(UserId)
                        })
          .Where(item => !item.Id.Contains("permission"))
          .AsDocumentQuery();
while (query.HasMoreResults)
{
  Items.AddRange(await query.ExecuteNextAsync<TodoItem>());
}

La requête de façon asynchrone récupère tous les documents appartenant à l’utilisateur authentifié, à partir de la collection spécifiée et les place dans un List<TodoItem> collection pour l’affichage.The query asynchronously retrieves all the documents belonging to the authenticated user, from the specified collection, and places them in a List<TodoItem> collection for display.

Le CreateDocumentQuery<T> méthode spécifie un Uri argument qui représente la collection doit être interrogée pour les documents, et un FeedOptions objet.The CreateDocumentQuery<T> method specifies a Uri argument that represents the collection that should be queried for documents, and a FeedOptions object. Le FeedOptions objet spécifie qu’un nombre illimité d’éléments peut être retourné par la requête et l’id d’utilisateur comme clé de partition.The FeedOptions object specifies that an unlimited number of items can be returned by the query, and the user's id as a partition key. Cela garantit que seuls les documents dans la collection partitionnée de l’utilisateur sont retournés dans le résultat.This ensures that only documents in the user's partitioned collection are returned in the result.

Notes

Notez que les documents d’autorisation, qui sont créés par l’intermédiaire de jeton de ressource, sont stockés dans la même collection de documents en tant que les documents créés par l’application Xamarin.Forms.Note that permission documents, which are created by the resource token broker, are stored in the same document collection as the documents created by the Xamarin.Forms application. Par conséquent, la requête de document contient un Where clause qui applique un prédicat de filtrage à la requête par rapport à la collection de documents.Therefore, the document query contains a Where clause that applies a filtering predicate to the query against the document collection. Cette clause permet de s’assurer que les documents d’autorisation ne sont pas retournées à partir de la collection de documents.This clause ensures that permission documents aren't returned from the document collection.

Pour plus d’informations sur la récupération des documents à partir d’une collection de documents, consultez Documents de la Collection de récupération de Document.For more information about retrieving documents from a document collection, see Retrieving Document Collection Documents.

Insertion de DocumentsInserting Documents

Avant l’insertion d’un document dans une collection de documents, le TodoItem.UserId propriété doit être mis à jour avec la valeur utilisée comme clé de partition, comme illustré dans l’exemple de code suivant :Prior to inserting a document into a document collection, the TodoItem.UserId property should be updated with the value being used as the partition key, as demonstrated in the following code example:

item.UserId = UserId;
await client.CreateDocumentAsync(collectionLink, item);

Cela garantit que le document est inséré dans la collection partitionnée de l’utilisateur.This ensures that the document will be inserted into the user's partitioned collection.

Pour plus d’informations sur l’insertion d’un document dans une collection de documents, consultez insertion d’un Document dans une Collection de documents.For more information about inserting a document into a document collection, see Inserting a Document into a Document Collection.

Suppression de DocumentsDeleting Documents

La valeur de clé de partition doit être spécifiée lors de la suppression d’un document à partir d’une collection partitionnée, comme illustré dans l’exemple de code suivant :The partition key value must be specified when deleting a document from a partitioned collection, as demonstrated in the following code example:

await client.DeleteDocumentAsync(UriFactory.CreateDocumentUri(Constants.DatabaseName, Constants.CollectionName, id),
                 new RequestOptions
                 {
                   PartitionKey = new PartitionKey(UserId)
                 });

Cela garantit que Cosmos DB sache qui partitionnée collection à supprimer le document à partir de.This ensures that Cosmos DB knows which partitioned collection to delete the document from.

Pour plus d’informations sur la suppression d’un document à partir d’une collection de documents, consultez suppression d’un Document à partir d’une Collection de documents.For more information about deleting a document from a document collection, see Deleting a Document from a Document Collection.

RécapitulatifSummary

Cet article a expliqué comment combiner de contrôle d’accès avec les collections partitionnées, afin qu’un utilisateur peut accéder uniquement à leurs propres documents de base de données de document dans une application Xamarin.Forms.This article explained how to combine access control with partitioned collections, so that a user can only access their own document database documents in a Xamarin.Forms application. Spécification de l’identité de l’utilisateur comme clé de partition garantit qu’une collection partitionnée peut stocker uniquement des documents pour cet utilisateur.Specifying the user's identity as a partition key ensures that a partitioned collection can only store documents for that user.