AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Ayuda / WLanguage / Funciones WLanguage / Comunicación / Gestión del protocolo OAuth 2.0
  • Propiedades específicas de las variables de tipo OAuth2Parameters
  • Cómo funciona la autenticación OAuth 2.0
  • Autenticación PKCE
WINDEV
WindowsLinuxJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac Catalyst
Otros
Procedimientos almacenados
El tipo OAuth2Parameters permite definir la información necesaria para autenticarse en un servicio web implementado el estándar OAuth 2.0. Estas características se pueden definir y cambiar utilizando diferentes propiedades WLanguage.
Este tipo de variable se debe pasar como parámetro a la función AuthIdentify. Si la autenticación se realiza correctamente, esta función devuelve una variable de tipo AuthToken, que puede utilizarse para realizar solicitudes autenticadas al servicio web.
Observación: Para obtener más información sobre la declaración de este tipo de variable y el uso de propiedades WLanguage, consulte Declarar una variable.
Ejemplo
// Exemple permettant de récupérer un token pour effectuer une requête sur Dropbox
OAuth2Params is OAuth2Parameters
OAuth2Params.ClientID = "01234567890123456789" 
OAuth2Params.ClientSecret = "98765432109876543210"
OAuth2Params.AuthURL = "https://www.dropbox.com/oauth2/authorize"
OAuth2Params.TokenURL = "https://api.dropboxapi.com/oauth2/token"
OAuth2Params.AdditionalParameters = "force_reapprove=false"
<COMPILE IF TypeConfiguration <> Site>
	// Si ce n'est pas dans un site WEB il faut une URL de redirection en localhost
	OAuth2Params.RedirectionURL = "http://localhost:9874/"
<END>

// Demande d'authentification : ouvre la fenêtre de login
MonToken is AuthToken = AuthIdentify(OAuth2Params)

// Requête authentifiée sur une API de Dropbox
req is httpRequest
req.Method = httpPost
req.URL = "https://api.dropboxapi.com/2/files/list_folder"
req.AuthToken = MonToken // Token d'authentification
req.ContentType = "application/json"
vParamAPI is Variant
vParamAPI.path = "/Homework/math"
vParamAPI.recursive = False
vParamAPI.include_media_info = False
vParamAPI.include_deleted = False
vParamAPI.include_has_explicit_shared_members = False
req.Content = VariantToJSON(vParamAPI)

réponseHTTP is httpResponse = HTTPSend(req)
let Données = JSONToVariant(réponseHTTP.Content)
// Utilisation des données reçues ...
Observaciones

Propiedades específicas de las variables de tipo OAuth2Parameters

Las siguientes propiedades pueden utilizarse para manipular la información necesaria para realizar la autenticación:
Nombre de la propiedadTipo utilizadoEfecto
AdditionalParametersCharacter stringParámetros de la primera solicitud de autenticación. Esta cadena debe tener el mismo formato que los parámetros de URL.
AuthURLCharacter stringURL de autorización a utilizar (primera URL del estándar OAuth 2.0).
ClientIDCharacter stringIdentificador del cliente proporcionado por el servicio al registrar la aplicación.
ClientSecretCharacter stringCódigo de acceso secreto de la aplicación. Este código lo proporciona el servicio al registrar la aplicación.
GrantTypeConstantTipo de autorización disponible. Los valores posibles son:
  • gtClientCredentials: Autenticación sin ventana de inicio de sesión. La autorización de acceso se otorga a la aplicación (no al usuario). El token proporcionado para acceder a los recursos de la aplicación está asociado a la aplicación.
  • gtAuthorizationCode (Valor predeterminado): La autorización de acceso se concede al usuario. Una ventana de inicio de sesión permite que los usuarios introduzcan su nombre de usuario y contraseña. El token de acceso está asociado al usuario.
OptionConstante de tipo IntegerOpciones de autenticación:
  • authDefault: Autenticación OAuth predeterminada.
  • authPKCE: Autenticación con PKCE (Clave de prueba para el intercambio de códigos).
Observación: PKCE proporciona seguridad adicional en comparación con OAuth. En algunos casos, aunque se utilice el protocolo PKCE, puede ser necesario especificar la clave secreta (propiedad ClientSecret). Le recomendamos que verifique la información esperada por la plataforma utilizada.
RedirectionURLCharacter stringURL de redirección a utilizar durante el mecanismo de autenticación.
Android Para una aplicación Windows o Android, esta URL debe tener el siguiente formato: "http://localhost:PortNumber". Este valor debe ser exactamente el mismo que se especificó al declarar la aplicación en el servicio web correspondiente.
iPhone/iPad Esta propiedad debe especificarse. Corresponde al esquema de URL de redireccionamiento especificado por el proveedor del servicio web para iOS.
Ejemplos:
  • para Facebook, la URL debe tener el siguiente formato: "fb<ClientID>://authorize/".
  • para Google, la URL debe tener el siguiente formato: "<Esquema de URL de iOS>:/oauth2redirect", donde:
    • <Esquema de URL de iOS> corresponde al valor proporcionado por Google al crear un ID de cliente OAuth para iOS.
    • "/oauth2redirect" es un ejemplo de valor. Este parámetro puede ser cualquier valor que empiece por una sola barra inclinada "/" (por ejemplo, no se admite "//oauth2redirect").
ResponseTypeCadena de caracteres o constanteTipo de respuesta esperada. Los valores posibles son:
  • oauth2ResponseTypeCode (o "Code"): La respuesta es de tipo "Code".
  • oauth2ResponseTypeToken (o "Token"): La respuesta es de tipo "Token".
El valor predeterminado es oauth2ResponseTypeCode.
Observaciones:
  • Para una autenticación "personal", el tipo de respuesta debe ser "Token".
  • En el caso de una autenticación para una API o un servicio (por ejemplo, el servidor de correo de Google), el tipo de respuesta debe ser "Code".
ScopeCharacter stringPermisos solicitados. Los valores posibles son específicos del servicio web utilizado.
Los valores posibles deben estar separados por un espacio.
TokenURLCharacter stringURL para obtener el token de acceso a utilizar (segunda URL del estándar OAuth 2.0).

Cómo funciona la autenticación OAuth 2.0

La función AuthIdentify realiza las siguientes acciones para implementar la autenticación OAuth 2.0:
  • Ejecución de una primera solicitud HTTP para pedir una autorización (URL de autorización especificada en la variable de tipo OAuth2Parameters).
  • Apertura de una ventana de autenticación OAuth 2.0. La ventana de autenticación la define cada servicio.
  • Tras la autenticación, el servidor devuelve un código de autorización para solicitar un token de acceso. Este código se añade en el parámetro de la segunda URL (URL del token de acceso especificado en la variable de tipo OAuth2Parameters).
  • Ejecución de una segunda solicitud HTTP para obtener el token de acceso. El resultado es un buffer JSON que contiene, entre otros elementos, el token de acceso ("access_token") que se utilizará para las solicitudes que requieran autenticación. La variable de tipo AuthToken contiene la información que se encuentra en el buffer JSON. Este token de acceso será utilizado por las llamadas a las API del servicio web.
Para usar las API del servicio web, utilice la función HTTPSend con una variable de tipo httpRequest que define la solicitud a ejecutar.
La variable AuthToken se asignará a la propiedad AuthToken de la variable httpRequest (ver ejemplo).
En este caso, el servidor recibirá la solicitud HTTP "Authorization" con un valor en el siguiente formato: "Authorization: Bearer xxx_access_token_xxx".
Atención:
  • Si el servidor no devuelve el token de acceso en formato de código JSON según el estándar OAuth2.0, se producirá un error y no se recibirá el token. La respuesta del servidor se puede obtener mediante la propiedad ServerResponse de la variable de tipo AuthToken.
  • Si el servidor no soporta el encabezado HTTP "Authorization" para transmitir el token de acceso, el desarrollador debe realizar la transmisión según el formato esperado por el servicio solicitado.
    El siguiente ejemplo permite utilizar el servicio Web de Facebook. En este caso, el token de acceso debe especificarse en la URL de la solicitud.
    • Android Ejemplo de código para Facebook
      // Exemple permettant de récupérer le nom du compte Facebook
      MonToken is AuthToken
      MonTokenParam is OAuth2Parameters
      
      MonTokenParam.ClientID = "123456789012345"
      MonTokenParam.ClientSecret = "45g8jh5kll45579021qsg5444j"
      MonTokenParam.AuthURL = "https://www.facebook.com/dialog/oauth"
      MonTokenParam.TokenURL = "https://graph.facebook.com/v2.3/oauth/access_token"
      MonTokenParam.RedirectionURL = "http://localhost:9874/"
      MonTokenParam.Scope = "email"
      
      MonToken = AuthIdentify(MonTokenParam)
      IF MonToken <> Null THEN
      	IF ErrorOccurred THEN
      		Error(ErrorInfo())
      	ELSE
      		// Token précisé sur l'URL de la requête
      		HTTPRequest("https://graph.facebook.com/me?access_token=" + MonToken.Value)
      		vMonRes is Variant = JSONToVariant(HTTPGetResult(httpResult))
      		// Récupération du nom du compte
      		Trace(vMonRes.name)
      	END
      END
    • iPhone/iPad Ejemplo de código para Facebook:
      MonToken is AuthToken
      MonTokenParam is OAuth2Parameters
      MonTokenParam.ClientID = "1705548803004741"
      MonTokenParam.ClientSecret = "7b3305a5aa1687ef04af001ec3388ecc"
      MonTokenParam.AuthURL = "https://www.facebook.com/dialog/oauth"
      MonTokenParam.TokenURL = "https://graph.facebook.com/oauth/access_token"
      MonTokenParam.RedirectionURL = "fb1705548803004741://authorize/"
      MonTokenParam.Scope = "email"
      
      MonToken = AuthIdentify(MonTokenParam)
      IF MonToken <> Null THEN
      	IF ErrorOccurred THEN
      		Error(ErrorInfo())
      	ELSE
      		// Token précisé sur l'URL de la requête
      		HTTPRequest("https://graph.facebook.com/me?access_token=" + MonToken.Value)
      		vMonRes is Variant = JSONToVariant(HTTPGetResult(httpResult))
      		// Récupération du nom du compte
      		Trace(vMonRes.name)
      	END
      END

Autenticación PKCE

Ejemplo de autenticación PKCE:
OAuth2Params is OAuth2Parameters
OAuth2Params.ClientID = "D90iXZWlteM3ESORkGkoWyGkJuxifE1z"
OAuth2Params.Option = authPKCE
OAuth2Params.AuthURL = "https://dev-rw5r4o2eowb8s70k.us.auth0.com/authorize"
OAuth2Params.TokenURL = "https://dev-rw5r4o2eowb8s70k.us.auth0.com/oauth/token"
OAuth2Params.RedirectionURL = "http://localhost:9874"
OAuth2Params.Scope = "openid email"

MyToken is AuthToken = AuthIdentify(OAuth2Params)
IF MyToken <> Null _AND_ NOT ErrorOccurred THEN
MyIdentity is OpenIDIdentity = OpenIDReadIdentity(MyToken)
	IF MyIdentity.Valid THEN
		Trace(MyIdentity.Email)
		Trace(MyIdentity.LastName)
		Trace(MyIdentity.FirstName)
	END
ELSE
	Info("Error:" + ErrorInfo(errFullDetails))
END
Versión mínima requerida
  • Versión 22
Esta página también está disponible para…
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 15/09/2024

Señalar un error o enviar una sugerencia | Ayuda local