Código: BadRequest Mensaje: La solicitud /me solo es válida con el flujo de autenticación delegada.
Estoy intentando subir un archivo a OneDrive utilizando la API de Microsoft Graph OneDrive.
Estoy utilizando el método para autenticación “Proveedor de credenciales del cliente”.
https://learn.microsoft.com/es-es/graph/sdks/choose-authentication-providers?tabs=CS#client-credentials-provider
Por ejemplo:
“`// El flujo de credenciales del cliente requiere que solicites el
// alcance /.default y configures previamente tus permisos en el
// registro de la aplicación en Azure. Un administrador debe otorgar
// su consentimiento para esos permisos de antemano.
var scopes = new[] { "https://graph.microsoft.com/.default" };
// Las aplicaciones de varios inquilinos pueden usar "common",
// las aplicaciones de un solo inquilino deben usar el ID de inquilino
// del portal de Azure
var tenantId = "mi-id-de-inquilino";
// Valores del registro de la aplicación
var clientId = "TU-ID-DE-CLIENTE";
var clientSecret = "TU-SECRETO-DE-CLIENTE";
// utilizando Azure.Identity;
var options = new TokenCredentialOptions
{
AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
};
// https://learn.microsoft.com/dotnet/api/azure.identity.clientsecretcredential
var clientSecretCredential = new ClientSecretCredential(
tenantId, clientId, clientSecret, options);
var graphClient = new GraphServiceClient(clientSecretCredential, scopes);
<pre><code> HttpPostedFileBase file = Request.Files;[0];
int fileSize = file.ContentLength;
string fileName = file.FileName;
string mimeType = file.ContentType;
Stream fileContent = file.InputStream;
var res = await graphClient.Me.Drive.Root.ItemWithPath(fileName).Content
.Request()
.PutAsync<DriveItem>(fileContent);
</code></pre>
“`
Después de ejecutar este código, se produce un error en la respuesta.
Código: BadRequest
Mensaje: La solicitud de /me solo es válida con el flujo de autenticación delegada.
Error interno:
Datos adicionales:
fecha: 2021-12-29T05:30:08
identificador de solicitud: b51e50ea-4a62-4dc7-b8d2-b26d75268cdc
identificador de solicitud del cliente: b51e50ea-4a62-4dc7-b8d2-b26d75268cdc
Identificador de solicitud del cliente: b51e50ea-4a62-4dc7-b8d2-b26d75268cdc
davy.ai
Solución
El mensaje de error sugiere que el flujo de autenticación que se está usando no es de autenticación delegada. En la autenticación delegada, el usuario debe dar su consentimiento para que la aplicación acceda a sus datos en su nombre.
Para utilizar la autenticación delegada, debes cambiar el método de autenticación de
Proveedor de credenciales de cliente
aProveedor de códigos de autorización
.Aquí tienes cómo puedes modificar el código de autenticación:
En el código modificado, estamos utilizando
Proveedor de códigos de autorización
para la autenticación. También hemos agregado el ámbitoFiles.ReadWrite
en la solicitud de autorización, ya que queremos cargar archivos.Asegúrate de agregar
{URI-de-redirección-base}/authorize
como una URI de redirección válida en la configuración de registración de la aplicación en Azure.Con estas modificaciones, el código debería poder cargar el archivo correctamente en OneDrive.