打开swagger,任意访问api,可以看到不用任何验证就能访问。对于绝大部系统而言这都是一个致命的问题。接下来我们就配置接口授权验证,先来看一下abp里面授权验证
“授权用于在应用程序中判断是否允许用户执行某些特定的操作.ABP扩展了ASP.NET Core 授权, 将 权限 添加为自动策略并且使授权系统在 应用服务 同样可用.所以ASP.NET Core授权的功能特性和它的文档在基于ABP的应用程序是可用的. ”(https://docs.abp.io/zh-Hans/abp/latest/Authorization)
先来看一实现
可以看到只需要添加[Authorize]就可以完成简单的授权验证,api在没有获得授权的情况下返回了401,需要授权就能正常调用api
CmsWebModule里面的ConfigureServices替换为,这里需要注意的是授权地址和作用域的值,要在表中已经存在的数据。
appsettings.json
CmsWebModule.cs
在弹出授权框时,我这里"client_id:"已经默认填上,是因为配置了默认值(如下)
这里有个问题:在swagger里面退出但并没有真正的清除登录信息。发现用户的状态还是登录状态,同时刷新swagger页面时发现授权的状态没有保持。看了几个官方的例子发现他们也是这样使用的,不知道他们的有没有这个问题(https://github.com/abpframework/abp-samples/blob/master/Ids2OpenId/src/Ids2OpenId.HttpApi.Host/Ids2OpenIdHttpApiHostModule.cs) 目前本人还未有更好的解决办法,暂时想到解决的办法有:
swagger上锁、授权先到这里,后面找个更好的办法再来解决。目前这样也不影响使用。
打开GitHub,进入开发者设置界面(https://github.com/settings/developers),新建一个 oAuth App,把用到的几个参数放在appsettings.json中
多账户的统一登录(大家可以看一下这位大佬的文章https://juejin.cn/post/6844904053411938311),这里使用的是建立一个第三方用户表(appUserThirdAuth)用于关联已有的用户表(appUser) appUserThirdAuth 表字段如下
大概分析一下,第三方身份认证授权的流程(github为例,可参考官方文档 https://docs.github.com/cn/rest/apps/oauth-applications#check-a-token )
接下来开启代码实站阶段
在 YiAim.Cms.Application 里面写实现请求,直接新建Authorize文件夹,新建(状态管理器主要用于控制请求限制)、第三方授权的基础请求服务,后面的第三方授权服务都应继承它,github授权服务,暴露的授权服务,具体看代码实现
这里涉及到http请求,在构造函数中依赖注入IHttpClientFactory,在 里配置 。使用IHttpClientFactory创建HttpClient StateManager.cs
ThirdOAuthServiceBase.cs
AuthorizeService.cs
运行项目打开swagger就会看到 多了Authorize
测试"{type}输入github,因为我们这里支持多平台的授权认证,目前仅实现github
有了第三方的用户信息就可以进行我们的授权认证逻辑处理(见:第三方身份认证授权的流程),到此需要第三方授权认证的关键实现逻辑已经实现的差不多了。 由于篇幅太长,本章就到此结束。下章将继续补充完整第三方授权登录的功能
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/57510.html