Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 用于Angular和Ionic客户端的OpenIdDict隐式流_Asp.net Core_Openid Connect_Openiddict - Fatal编程技术网

Asp.net core 用于Angular和Ionic客户端的OpenIdDict隐式流

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中使用隐式流,但

我们一直在使用OpenIdDict和密码流

但是:我们希望切换到隐式流(openiddict身份验证服务器的弹出窗口)。 我可以找到ASP.NET应用程序的示例,但我们希望在以下情况下使用此示例: 1/一个有棱角的1.0网站 2/离子2.0应用程序

有人能给我一些提示吗?(Aurelia的例子很接近,但我们无法让它在离子或角度上工作)。 我们可以使用哪些库,我们应该进行哪些调用

非常感谢

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