0
Votar
Presentado por
AfsarP1
sobre
26-06-2020
02:09 a. M.
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
v-yuta-msft
@ 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.
2 Comentarios (2 Nuevos)