Problema de ROPC de OAuth 2.0 (conector de datos)

Un usuario Pregunto ✅


0


Votar

Hola

He creado conectores de datos que utilizan un flujo Oauth 2.0 para conectarse a nuestro entorno de nube. He usado el client_id, el nombre de usuario y la contraseña en el flujo, sin embargo, mientras se ejecuta, solicita las credenciales de firma, lo que no debería ser el caso. Según el documento, se trata de un error especial cuando hay algún problema con el tipo y la ruta de la fuente de datos.

[DataSource.Kind = «System» , Publish=»System.Publish»]
Compartido System.Contents = Value.ReplaceType (SystemNavTable, escriba la función (url como Uri.Type) como cualquiera);

// Descripción del tipo de fuente de datos de Oauth

Sistema = [
Testconnection = (dataSourcePath) => {«System.Contents»},
Authentication = [
OAuth = [
StartLogin=StartLogin,
FinishLogin=FinishLogin,
Refresh=Refresh,
Logout=Logout
]
],
Label = «Conector del sistema»
];

StartLogin = (resourceUrl, estado, pantalla) =>
dejar
authorizeUrl = authorize_uri & «?» & Uri.BuildQueryString ([
client_id = client_id,
redirect_uri = redirect_uri,
state = state,
scope = «offline_access » & GetScopeString(scopes, scope_prefix),
response_type = «code»,
response_mode = «query»,
login = «login»
])
en
[
LoginUri = authorizeUrl,
CallbackUri = redirect_uri,
WindowHeight = 720,
WindowWidth = 1024,
Context = null
];

FinishLogin = (contexto, callbackUri, estado) => // FinishLogin = (contexto, CallbackUri, estado) =>
dejar
// analizar el callbackUri completo y extraer la cadena de consulta
partes = Uri.Parts (callbackUri)[Query],
// si la cadena de consulta contiene un campo «error», genera un error
// de lo contrario, llame a TokenMethod para intercambiar nuestro código por un access_token
resultado = si (Record.HasFields (parts, {«error», «error_description»})) entonces
error Error.Record (partes[error], partes[error_description], partes)
demás
TokenMethod («código_autorización», «código», partes[code])
en
resultado;

Refresh = (resourceUrl, refresh_token) => TokenMethod («refresh_token», «refresh_token», refresh_token);

Cerrar sesión = (token) => logout_uri;

// Esto se llama cuando se completa StartLogin () y se produce una redirección.
TokenMethod = (grantType, tokenField, código) =>
dejar
queryString = [
client_id= «passing the client id value»,
scope=»openid clientid(value) offline_access»,
grant_type=»password»,
//response_type=»token»,
username=»passing the username value»,
password=»passing the password value!»
],
queryWithCode = Record.AddField (queryString, tokenField, código),

tokenResponse = Web.Contents (token_uri, [
Content = Text.ToBinary(Uri.BuildQueryString(queryWithCode)),
Headers = [
#»Content-type» = «application/x-www-form-urlencoded»,
#»Accept» = «application/json»
],
ManualStatusHandling = {400}
]),
cuerpo = Json.Document (tokenResponse),
resultado = si (Record.HasFields (body, {«error», «error_description»})) entonces
error Error.Record (cuerpo[error], cuerpo[error_description], cuerpo)
demás
cuerpo
en
resultado;

Como puede ver, estoy pasando el nombre de usuario y la contraseña, pero todavía me redirige a la pantalla de inicio de sesión (que de nuevo, según el documento de microsoft, es un error). ¿Alguien puede avisar qué está mal con el código anterior?

Estado: nuevo

2 Comentarios (2 Nuevos)

@ AfsarP1,

¿Ha comprobado las credenciales y comprobado si el token de acceso ha caducado?

Saludos,

Jimmy Tao

AfsarP1

Hola jimmy

Las credenciales que paso con el inicio de sesión son correctas. Estoy enviando el ID de cliente, el nombre de usuario de la API y la contraseña para obtener un token, pero parece que está fallando en alguna parte. Idealmente, debería llevarlos con la solicitud a nuestra nube y devolver el token para iniciar sesión, pero no funciona. Me dirige a una página de inicio de sesión y puedo ingresar mis credenciales (individuales) que son diferentes a las que tengo en el código. Las credenciales del código coinciden con el ID de cliente. De todos modos, mis credenciales no serán aceptadas porque mi ID de cliente será diferente.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *