Asp.net core 用于Angular和Ionic客户端的OpenIdDict隐式流
我们一直在使用OpenIdDict和密码流 但是:我们希望切换到隐式流(openiddict身份验证服务器的弹出窗口)。 我可以找到ASP.NET应用程序的示例,但我们希望在以下情况下使用此示例: 1/一个有棱角的1.0网站 2/离子2.0应用程序 有人能给我一些提示吗?(Aurelia的例子很接近,但我们无法让它在离子或角度上工作)。 我们可以使用哪些库,我们应该进行哪些调用 非常感谢Asp.net core 用于Angular和Ionic客户端的OpenIdDict隐式流,asp.net-core,openid-connect,openiddict,Asp.net Core,Openid Connect,Openiddict,我们一直在使用OpenIdDict和密码流 但是:我们希望切换到隐式流(openiddict身份验证服务器的弹出窗口)。 我可以找到ASP.NET应用程序的示例,但我们希望在以下情况下使用此示例: 1/一个有棱角的1.0网站 2/离子2.0应用程序 有人能给我一些提示吗?(Aurelia的例子很接近,但我们无法让它在离子或角度上工作)。 我们可以使用哪些库,我们应该进行哪些调用 非常感谢 Frank 我只在带有typescript的angular2应用程序的OpenIddict中使用隐式流,但
Frank
我只在带有typescript的angular2应用程序的OpenIddict中使用隐式流,但我强烈建议您使用。同样的方法适用于所有SPA 您可以创建一个角度服务来包装这个库,其中包含
UserManager
,并使用一些方法,例如signIn、signInCallback
@Injectable()
导出类OAuthService{
私人客户:UserManager;
私人用户:承诺;
构造函数(私有ngZone:ngZone,@Inject(OAUTH_CONFIG_令牌)选项:IOAuthConfig){
Log.logger=控制台;
Log.level=Log.INFO;
this.client=新用户管理器({
authority:options.authority,//openiddict服务的url
client\u id:options.client\u id,//您的openiddict应用程序id
redirect\u uri:options.redirect\u uri,//登录后应用程序的url
post\u logout\u redirect\u uri:options.post\u logout\u redirect\u uri,//注销后应用程序的url
scope:options.scope,//您的openid作用域如“openid电子邮件配置文件角色”
响应类型:'id\u令牌',//id+访问令牌
filterProtocolClaims:对,
loadUserInfo:true,
});
this.client.events.addUserLoaded(用户=>{
this.user=Promise.resolve(用户);
Log.logger.info('OAuthService:User loaded');
});
this.client.events.addUserSignedOut(()=>Log.logger.info('OAuthService:User signed out');
this.client.events.addUserUnload(()=>Log.logger.info('OAuthService:User Unload');
this.client.events.addSilentRenewError(err=>Log.logger.error(err));
this.user=this.ngZone.runOutsideAngular(()=>{
返回此.client.getUser()。然后((用户)=>{
if(user==null){
返回null;
}
返回用户;
});
});
}
public get events():usermanagervents{
返回this.client.events;
}
公共签名():如你所见的承诺
将此服务注入到您需要的任何地方(用户的配置文件字段包含您的声明,如角色
,唯一名称
等)
制作两个组件,如LoginComponent和LogoutComponent,它们只需调用signinCallback
和signoutCallback
,并重定向到应用程序中的某个地方,如主页
@组件({
选择器:“应用程序注销”,
templateUrl:“./logout.template.html”
})
导出类LogoutComponent实现OnInit{
构造函数(专用路由器:路由器,专用oauthService:oauthService){}
恩戈尼尼特(){
this.oauthService.signoutCallback()。然后(()=>this.router.navigate(['']);
}
}
这两个组件路由必须与OAuthService
构造函数中给定的UserManager配置匹配
{
路径:“登录”,
组件:LoginComponent
},
{
路径:“注销”,
组件:LogoutComponent
},
例如,如果重定向\u uri
是http://localhost:5000/login
和post\u logout\u redirect\u uri
是http://localhost:5000/login
您可能需要订阅一些事件,以便在用户刚刚登录时刷新一些属性
public ngOnInit():void{
这个.onUserChange();
this.oauthService.events.addUserLoaded(()=>this.onUserChange());
this.oauthService.events.addUserUnload(()=>this.onUserChange());
}
私有onUserChange():void{
this.oauthService.isLoggedIn().then(x=>this.isLoggedIn=x);
}
在这之后,您几乎完成了,OpenIddict中还不支持静默登录,而且我还没有找到解决方法
同样,这都是Typescript/Angular2,但它应该很容易适应JS/Angular非常感谢:我会尝试一下的!!/Frank