
Appauth para JavaScript es un SDK de clientes para clientes públicos para comunicarse con los proveedores de OAuth 2.0 y OpenID Connect siguiendo las mejores prácticas RFC 8252 - OAuth 2.0 para aplicaciones nativas. La biblioteca está diseñada para su uso en Web Apps , aplicaciones Node.js CLI, Chrome Apps y aplicaciones que usan Electron o marcos similares.
Se esfuerza por mapear directamente las solicitudes y respuestas de esas especificaciones, mientras sigue el estilo idiomático del lenguaje de implementación.
La biblioteca también admite la extensión PKCE a OAuth, que se creó para asegurar códigos de autorización en clientes públicos cuando se utilizan redirecciones del esquema de URI personalizado. La biblioteca es amigable con otras extensiones (estándar o de otro tipo) con la capacidad de manejar parámetros adicionales en todas las solicitudes y respuestas de protocolo.
Una aplicación de ejemplo que usa la biblioteca se incluye en la carpeta src/node_app y en https://github.com/googlesamples/appauth-js-electron-sample.
AppAuth admite la interacción manual con el servidor de autorización donde necesita realizar sus propios intercambios de tokens. Este ejemplo realiza un intercambio manual.
AuthorizationServiceConfiguration . fetchFromIssuer ( openIdConnectUrl )
. then ( response => {
log ( 'Fetched service configuration' , response ) ;
this . configuration = response ;
this . showMessage ( 'Completed fetching configuration' ) ;
} )
. catch ( error => {
log ( 'Something bad happened' , error ) ;
this . showMessage ( `Something bad happened ${ error } ` )
} ) ; this . notifier = new AuthorizationNotifier ( ) ;
// uses a redirect flow
this . authorizationHandler = new RedirectRequestHandler ( ) ;
// set notifier to deliver responses
this . authorizationHandler . setAuthorizationNotifier ( this . notifier ) ;
// set a listener to listen for authorization responses
this . notifier . setAuthorizationListener ( ( request , response , error ) => {
log ( 'Authorization request complete ' , request , response , error ) ;
if ( response ) {
this . code = response . code ;
this . showMessage ( `Authorization Code ${ response . code } ` ) ;
}
} ) ;
// create a request
let request = new AuthorizationRequest ( {
client_id : clientId ,
redirect_uri : redirectUri ,
scope : scope ,
response_type : AuthorizationRequest . RESPONSE_TYPE_CODE ,
state : undefined ,
extras : { 'prompt' : 'consent' , 'access_type' : 'offline' }
} ) ;
// make the authorization request
this . authorizationHandler . performAuthorizationRequest ( this . configuration , request ) ; this . tokenHandler = new BaseTokenRequestHandler ( ) ;
let request : TokenRequest | null = null ;
if ( this . code ) {
let extras : StringMap | undefined = undefined ;
if ( this . request && this . request . internal ) {
extras = { } ;
extras [ 'code_verifier' ] = this . request . internal [ 'code_verifier' ] ;
}
// use the code to make the token request.
request = new TokenRequest ( {
client_id : clientId ,
redirect_uri : redirectUri ,
grant_type : GRANT_TYPE_AUTHORIZATION_CODE ,
code : this . code ,
refresh_token : undefined ,
extras : extras
} ) ;
} else if ( this . tokenResponse ) {
// use the token response to make a request for an access token
request = new TokenRequest ( {
client_id : clientId ,
redirect_uri : redirectUri ,
grant_type : GRANT_TYPE_REFRESH_TOKEN ,
code : undefined ,
refresh_token : this . tokenResponse . refreshToken ,
extras : undefined
} ) ;
}
this . tokenHandler . performTokenRequest ( this . configuration , request )
. then ( response => {
// ... do something with token response
} ) ;Este cliente ha sido escrito con TypeScript.
Instale la última versión de Node. NVM (el administrador de versiones de nodo es muy recomendable).
Use nvm install para instalar la versión de nodo.js recomendada.
Descargue la última versión de Visual Studio Code desde aquí.
Esta aplicación utiliza npm para provocar dependencias de TI.
git clone la biblioteca AppAuthJS y vaya a la carpeta raíz del proyecto que contiene el archivo package.json .npm install para instalar todas las dependencias de desarrollo y proyecto. ¡Eso es todo! Ahora está listo para comenzar a trabajar en AppAuthJS .
El proyecto utiliza scripts npm para automatizar los flujos de trabajo de desarrollo. Estos scripts están disponibles a través del archivo package.json .
Se incluyen los siguientes scripts:
npm run-script compile o tsc compilará todos sus archivos TypeScript. Todos los archivos compilados entran en la carpeta built/ .
npm run-script watch o tsc --watch compilará sus archivos TypeScript en modo de watch . Recomendado si desea obtener comentarios continuos.
npm run-script build-app genera el archivo de salida bundle.js en el directorio built/ . Esto incluye la biblioteca completa AppAuthJS , incluidas todas sus dependencias.
Disposiciones npm test El corredor de prueba de Karma ejecuta todas las pruebas unitarias. Todas las pruebas se escriben usando Jasmine. Para depurar sus pruebas, haga clic en el botón Debug en el corredor de prueba Karma para ver la fuente real de las pruebas. Puedes adjuntar puntos de descanso aquí.
npm run-script app construye la aplicación de prueba en un servidor web local. Esta es una aplicación de extremo a extremo que utiliza appAuthjs y es una demostración sobre cómo usar la biblioteca.
npm run-script node-app construye una aplicación de muestra Node.js CLI. Esta es una aplicación de extremo a extremo que utiliza appAuthjs en un contexto Node.js.