网站精简布局,郴州市地图高清版大图,条形码怎么做网页,建设银行论坛网站首页本节介绍Client的ClientCredentials客户端模式#xff0c;先看下画的草图#xff1a;一、在Server上添加动态新增Client的API 接口。为了方便测试#xff0c;在Server服务端中先添加swagger#xff0c;添加流程可参考#xff1a;https://www.cnblogs.com/suxinlcq/p/67575… 本节介绍Client的ClientCredentials客户端模式先看下画的草图一、在Server上添加动态新增Client的API 接口。为了方便测试在Server服务端中先添加swagger添加流程可参考https://www.cnblogs.com/suxinlcq/p/6757556.html 在ValuesController控制器中注入ConfigurationDbContext上下文此上下文可用来加载或配置IdentityServer4.EntityFramework的Client、身份信息、API资源信息或CORS数据等。在ValuesController中实添加以下代码 private ConfigurationDbContext _context; publicValuesController(ConfigurationDbContext context){_context context;}添加动态新增Client的API接口控制器代码如下 二、对Server上的API进行保护1安装IdentityServer4.AccessTokenValidation包2在startup.cs中ConfigureServices方法添加如下代码AddAuthentication把Bearer配置成默认模式将身份认证服务添加到DI中。AddIdentityServerAuthentication把IdentityServer的access token添加到DI中供身份认证服务使用。3在startup.cs中Configure方法添加如下代码UseAuthentication将身份验证中间件添加到管道中以便在每次调用主机时自动执行身份验证。4在ValuesController控制器中添加[Authorize] 5在项目属性-调试 中启动浏览器并设成swagger如图6启动项目并调用第一个Get接口。显示Unauthorized未授权证明[Authorize]起作用了。 三、搭建Client客户端1新建一个控制台程序安装IdentityModel包。2添加类IDSHelper.cs添加客户端请求API接口代码。3修改Program.cs代码如下class Program{ static void Main(string[] args) IDSHelper.MainAsync().GetAwaiter().GetResult();}4按CtrlF5可以获取到access token和接口返回值复制token用postman调用成功获取到了接口返回值。 四、测试动态新增Client接口安装IdentityServer4包。安装IdentityServer4.EntityFramework包。在IDSHelper.cs类中添加Post方法顺便把main中改成对Post调用static void Main(string[] args) IDSHelper.Post().GetAwaiter().GetResult();按CtrlF5调用新增Client的接口并成功返回true。同时可以在数据库中的Client表找到相关记录。需要注意的是不能添加相同Client ID的Client。 五、在Client中添加Claim信息并在API接口中对Claim信息进行验证。关于Claim的介绍可以看这篇文章http://www.cnblogs.com/stulzq/p/8726002.html这里把Claim简单当做用户的身份信息使用修改Post方法里面的Client可以看出Claims为List可以是很多个角色这里只添加一个。CtrlF5运行成功添加superAdmin Client。 现在需要对Server服务端的新增Client接口进行Claim身份验证添加如下代码 [Authorize(Roles admin)]然后再客户端修改授权的账号为superadmin。TokenClient tokenClient new TokenClient(disco.TokenEndpoint, superAdmin, secret);CtrlF5运行问题出现了返回了Forbidden没有权限进行访问。这时候我们上官网查阅了资料发现在添加Client的Claim时候IdentityServer EntityFramework会为Claim的role添加一个默认前缀为client_。所以实际上它为client_role。而服务端只能对role进行验证。此时我们需要把Claim的默认前缀去掉设置为空ClientClaimsPrefix 。 去掉Server的Role验证添加形如下面代码的Client。 CtrlF5运行成功添加adminClient Client这次的是Role为admin。然后重新再Server服务端加上[Authorize(Roles admin)]同时修改验证账号为adminClient。TokenClient tokenClient new TokenClient(disco.TokenEndpoint, adminClient, secret);最后运行程序成功地在[Authorize(Roles admin)]权限下访问并新增了Client。 六、需要注意的问题1新增Client到数据库时候这里需要接收IdentityServer4.EntityFramework.Entities.Client而不是IdentityServer4.Models.Client否则API接口在接收和转化Client模型的时候会报错。2此外本节介绍的Client的AllowedGrantTypes 都为 GrantTypes.ClientCredentials相应的客户端请求是需要用RequestClientCredentialsAsync方法。最后再次提下ClientCredentials模式的适用场景用于和用户无关服务与服务之间直接交互访问资源。 Server服务端源码地址https://github.com/Bingjian-Zhu/ServerClient客户端源码地址https://github.com/Bingjian-Zhu/Client相关文章从Client应用场景介绍IdentityServer4一基于IdentityServer4 实现.NET Core的认证授权IdentityServer4与ocelot实现认证与客户端统一入口使用Dapper持久化IdentityServer4原文地址: https://www.cnblogs.com/FireworksEasyCool/p/10137011.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com