2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > .NET Core IdentityServer4实战 第六章-Consent授权页

.NET Core IdentityServer4实战 第六章-Consent授权页

时间:2021-03-31 13:42:38

相关推荐

.NET Core IdentityServer4实战 第六章-Consent授权页

在identityServer4中登陆页面只要是成功了,就会注册一个Cookie在服务器资源上,像现在大部分的网站第三方授权,都是经过一个页面,然后选需要的功能,IdentityServer4也给我们提供了,只要你登陆成功,就会跳转到Consent/Index(Get)中,所以我们只要在其中做手脚就好了。

在编写代码之前我们要知道IdentityServer的三个接口,IClientStore是存放客户端信息的,IResourceStore是存放资源API信息的,这两个接口都是在IdentityServer4的Stores的命名空间下,还有一个接口是IIdentityServerInteractionService用于与IdentityServer通信的服务,主要涉及用户交互。它可以从依赖注入系统获得,通常作为构造函数参数注入到IdentityServer的用户界面的MVC控制器中。

下面我们创建一个Consent控制器在认证服务器上,名为ConsentController,在其中我们需要将这三个接口通过构造函数构造进来。

在控制器中,因为登陆成功是从Account控制器调过来的,那个时候还带着ReturnUrl这个而参数,我们在这个控制器中也需要ReturnUrl,所以在Get方法中写上该参数,要不然跳转不过来的。

其中调用了BuildConsentViewModel方法用于返回一个consent对象,其中我们使用_identityServerInteractionService接口获取了上下文,然后再通过其余的两个接口找到它客户端还有资源api的信息。然后再调用了自定义的CreateConsentViewModel对象创建了consent对象。

以上我们的控制器就完成了,现在我们搞一下视图,在视图中我们就是简单做一下,使用ConsentVm作为视图绑定对象,在之中我遇到了一个Bug,我用@Html.Partial("_ScopeListItem", item);的时候突然就报错了,在页面上显示一个Task一大堆的错误信息,我也不知道啥情况(望大佬解决),换成不是异步的就行了。

下面是局部视图的定义,传过来的对象是ResourceScopes和IdentityScopes,但他们都是对应ScopeVm,在其中呢就是把他们哪些权限列出来,然后勾选,在它的父页面已经做了post提交,所以我们还得弄个控制器。

这个方法的参数是我们所自定义的实体,其中有按钮还有返回的地址,在其中我们判断了是否选择OK,选择不那就直接赋一个拒绝的指令,如果ok那么就直接判断是否有这个权力,因为我们在config中进行了配置,然后如果有,呢么就直接添加,在不==null的清空下,我们根据returlUrl这个字符串获取了请求信息,然后通过GrantConsentAsync方法直接同意了授权,然后直接跳转过去,就成功了。

最后,在调试的时候一定要Client的RequireConsent设置为true.

原文地址:/ZaraNet/p/11146224.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。