oauth2-oidc-client Universal OAuth2/OpenID Connect

我要开发同款
匿名用户2021年11月26日
115阅读

技术信息

授权协议
View license

作品详情

OAUTH2/OIDCCliet

UiversalOAUTH2/OpeIDCoectClietlibrary

Istallatio:

pmistalloauth2-oidc-cliet--save

Usageauth.ts(AgularNativeScript)import{Compoet,OIit}from"@agular/core";import{RouterExtesios,PageRoute}from"ativescript-agular/router";import*aswebViewModulefrom"ts-core-modules/ui/web-view";import*asurlfrom"urlparser";import{AuthService}from"oauth2-oidc-cliet";import{timer}from"rxjs/observable/timer";import{map,filter,switchMap,timeout}from"rxjs/operators";import"rxjs/add/operator/switchMap";@Compoet({moduleId:module.id,template://html`<ActivityIdicatorrow="1"#activityIdicator[busy]="loadig"width="100"height="100"class="activity-idicator"></ActivityIdicator><WebViewvisibility="{{!loadig?'visible':'collapsed'}}"[src]="authURL"(loadStarted)="loadStarted($evet)"></WebView>`})exportclassAuthCompoetimplemetsOIit{publicauthURL;publicloadig:boolea=true;publiccostructor(privaterouter:RouterExtesios,privatepageRoute:PageRoute,privateauthService:AuthService){this.authService.cofig={authRoute:()=>{this.router.avigate([""],{clearHistory:true});},homeRoute:()=>{this.router.avigate(["/home"],{clearHistory:true});},clietId:"...",clietSecret:"...",//userame:"?...",//password:"?...",//REDIRECT:"?...",//SCOPE:"opeid+email+profile",//default//state:Math.radom().toStrig(36).substrig(7),//oce:"?...",oauth2Cofig:{"issuer":"...","authorizatio_edpoit":"...","toke_edpoit":"...","toke_itrospectio_edpoit":"...","userifo_edpoit":"...","ed_sessio_edpoit":"..."}};}//authorizatio_codelogiautheticatiopublicgOIit(){this.pageRoute.activatedRoute.switchMap(activatedRoute=>activatedRoute.queryParams).forEach((params)=>{letactio=params["actio"];if(actio==ull||actio==="logi"){this.logi();}elseif(actio==="logout"){this.logout();}});}privateparseURLData(urlstr){letparsedURL=url.parse(urlstr);letcode=parsedURL.query?parsedURL.query.params["code"]:ull;letstate=parsedURL.query?parsedURL.query.params["state"]:ull;letoce=parsedURL.query?parsedURL.query.params["oce"]:ull;letredirectName=parsedURL.path.base;if(code&&redirectName.match(`\\w*/?${this.authService.cofig.REDIRECT}`)){retur{code,state,oce};}else{returull;}}publiclogi(){this.authURL=this.authService.logi();timer(1000).subscribe(x=>{this.loadig=false;});}publiclogout(){this.loadig=true;this.authURL=this.authService.logout();timer(1000).subscribe(x=>this.logi());}publicgetUser(){this.authService.getUser().subscribe(x=>cosole.log(JSON.strigify(x)));}publicloadStarted(e:webViewModule.LoadEvetData){letauthData=this.parseURLData(e.url);if(authData&&authData.state===this.authService.cofig.state){this.loadig=true;this.authURL="";this.authService.iit(authData.code);//ullforpasswordgrat}}}import{NgModule,NO_ERRORS_SCHEMA}from"@agular/core";import{NativeScriptRouterModule}from"ativescript-agular/router";import{NativeScriptCommoModule}from"ativescript-agular/commo";import{NativeScriptFormsModule}from"ativescript-agular/forms";import{Route}from"@agular/router";exportcostrouterCofig:Route[]=[{path:"",compoet:AuthCompoet}];@NgModule({schemas:[NO_ERRORS_SCHEMA],imports:[NativeScriptFormsModule,NativeScriptCommoModule,NativeScriptRouterModule,NativeScriptRouterModule.forChild(routerCofig)],declaratios:[AuthCompoet]})exportclassAuthModule{costructor(){}}auth.ts(AgularWeb)//betadeclarevardocumet;import{Compoet,OIit}from"@agular/core";import{Router}from"@agular/router";import*asurlfrom"urlparser";import{AuthService}from"oauth2-oidc-cliet";import{timer}from"rxjs/observable/timer";import"rxjs/add/operator/switchMap";@Compoet({moduleId:module.id,template://html`<style>.ico-moo{fot-family:"icomoo";}@keyframesrotatig{from{trasform:rotate(0deg);}to{trasform:rotate(360deg);}}.rotatig{aimatio:rotatig2sliearifiite;}</style><Labelvisibility="{{loadig?'visible':'collapsed'}}"class="ico-moorotatig"ierText=""style="fot-size:30;display:ilie-block;positio:absolute;top:50%;left:50%;"></Label>`})exportclassAuthCompoetimplemetsOIit{publicauthURL;publicloadig:boolea=true;publiccostructor(privaterouter:Router,privatepageRoute:ActivatedRoute,privateauthService:AuthService){this.authService.cofig={authRoute:()=>{this.router.avigate([""],{clearHistory:true});},homeRoute:()=>{this.router.avigate(["/home"],{clearHistory:true});},clietId:"...",clietSecret:"...",//userame:"?...",//password:"?...",REDIRECT:widow.locatio.href,//SCOPE:"opeid+email+profile",//default//state:Math.radom().toStrig(36).substrig(7),//oce:"?...",oauth2Cofig:{"issuer":"...","authorizatio_edpoit":"...","toke_edpoit":"...","toke_itrospectio_edpoit":"...","userifo_edpoit":"...","ed_sessio_edpoit":"..."}};}//authorizatio_codelogiautheticatiopublicgOIit(){this.pageRoute.activatedRoute.switchMap(activatedRoute=>activatedRoute.queryParams).forEach((params)=>{letactio=params["actio"];if(actio==ull||actio==="logi"){letauthData=this.parseURLData(widow.locatio.href);if(authData&&authData.state===this.authService.cofig.state){this.loadig=true;this.authURL="";this.authService.iit(authData.code);//ullforpasswordgrat}else{this.logi();}}elseif(actio==="logout"){this.logout();}});}privateparseURLData(urlstr){letparsedURL=url.parse(urlstr);letcode=parsedURL.query?parsedURL.query.params["code"]:ull;letstate=parsedURL.query?parsedURL.query.params["state"]:ull;letoce=parsedURL.query?parsedURL.query.params["oce"]:ull;letredirectName=parsedURL.path.base;if(code&&redirectName.match(`\\w*/?${this.authService.cofig.REDIRECT}`)){retur{code,state,oce};}else{returull;}}publiclogi(){widow.locatio.href=this.authService.logi();timer(1000).subscribe(x=>{this.loadig=false;});}publiclogout(){this.loadig=true;widow.locatio.href=this.authService.logout();timer(1000).subscribe(x=>this.logi());}publicgetUser(){this.authService.getUser().subscribe(x=>cosole.log(JSON.strigify(x)));}}import{NgModule,NO_ERRORS_SCHEMA}from"@agular/core";import{RouterModule}from"@agular/router";import{CommoModule}from"@agular/commo";import{FormsModule}from"@agular/forms";import{Route}from"@agular/router";exportcostrouterCofig:Route[]=[{path:"",compoet:AuthCompoet}];@NgModule({schemas:[NO_ERRORS_SCHEMA],imports:[FormsModule,CommoModule,RouterModule,RouterModule.forChild(routerCofig)],declaratios:[AuthCompoet]})exportclassAuthModule{costructor(){}}app.module.ts(Agular)...import{HttpClietModule,HTTP_INTERCEPTORS}from"@agular/commo/http";import{AuthService}from"oauth2-oidc-cliet";import{HttpRequest,HttpHadler,HttpEvet,HttpIterceptor,HttpHeaders}from"@agular/commo/http;@Ijectable()exportclassAuthIterceptorimplemetsHttpIterceptor{costructor(privateauthService:AuthService){}itercept(req:HttpRequest<ay>,ext:HttpHadler):Observable<HttpEvet<ay>>{costtoke=`Bearer${this.authService.getToke()}`;req=req.cloe({setHeaders:{Authorizatio:toke}});returext.hadle(req);}}@NgModule({schemas:[...],declaratios:[...,],bootstrap:[..],imports:[...,],providers:[AuthService,{provide:HTTP_INTERCEPTORS,useClass:AuthIterceptor,multi:true}]})exportclassAppModule{}...Auth.js(Web)//draftcostauthService=ew(require("oauth2-oidc-cliet").AuthService)();authService.cofig={...}authService.iit(/*code*/);vartoke=authService.getToke();...........Notes:PleasesetuptheRedirectCoditioOAuth2/OpeIDsettigtoequal"*"(Ay)

Copyright(C)2018@medozsApache-2.0Licese

功能介绍

OAUTH2/OIDC Client Universal OAUTH2/OpenID Connect Client library Installation: npm install oauth...

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论