Identity Server 4 - Hybrid Flow - 保护API资源
2021-03-30 17:29
标签:art home forbidden ESS val read 相关 允许 如何 这个系列文章介绍的是Identity Server 4 的 Hybrid Flow, 前两篇文章介绍了如何保护MVC客户端, 本文介绍如何保护API资源. 保护MVC客户端的文章: https://www.cnblogs.com/cgzl/p/9253667.html, https://www.cnblogs.com/cgzl/p/9268371.html 相关代码: https://github.com/solenovex/Identity-Server-4-Tutorial-Code 里面03那部分. 回顾一下该项目使用的流程 图里有IDP (Identity Provider, 我例子里是用Identity Server 4构建的项目)和客户端(我的例子里是MVC客户端). 在上面流程走完之后, MVC客户端获得了Access Token, MVC客户端验证Access Token并成功后, 就可以使用Access Token来访问被保护的API资源了, 而Access Token会在被保护的API那里再次进行验证. 首先在IDP里配置一个返回ApiResoruce的方法: 和IdentityResource类似, ApiResource就是与API相关的scopes. 在Client配置那里, 把这个ApiResource的名字添加到允许的scopes里: 最后在IDP的startup里, 注册ApiResources: 现在来到MVC客户端这里, 需要把上面的scope添加上: 最后来到API项目, 首先确保使用HTTPS: API项目还需要安装IdentityServer4.AccessTokenValidation这个包, 可以通过Nuget安装. 安装后, 还需要进行配置 (官方文档: https://identityserver4.readthedocs.io/en/release/quickstarts/1_client_credentials.html#adding-an-api): 其中IdentityServerAuthenticationDefaults.AuthenticationScheme 就是 “Bearer” 的意思, 这里使用的就是这个方案. AddIdentityServerAuthentication()方法注册了Access Token 验证的处理者. 里面Authority就是IDP的URI, ApiName就是IDP里配置的API的名字. 在Startup的Configure方法里, 还需要把它添加到管道: 要确保它在UseMVC之前调用. 我在API项目里使用过滤器为所有的Controller都加上了授权过滤: 当然也可以在具体的Controller或Action级写上这个: 无论如何现在访问Country资源是需要授权的. 回到MVC客户端, 在Home的Contact Action里调用CountryAPI资源: 下面测试一下未使用Access Token访问被保护的Country资源的情况, 重新操作可以看到用户同意授权页面出现了刚才配置的API资源名: 在访问Contact页面的时候, 提示未授权: 那就用之前介绍过的方法来获取Access Token并设置Authorization Header为 “Bearer [AccessToken]” 即可: 再修改一下Contact页面, 显示Access Token: 重新操作, 就可以看到Country资源数据了: 去jwt.io对Access Token进行解码: 看一下aud (audience, 观众) 这个属性, 它有两个值, 第一个是指IDP那边对资源 (调用用户信息端点), 第二个就是指API那个项目. 这个属性说明这个access token是为它们俩准备的. 而scope里面的“restapi”就是aud里面的“restapi”, 所以这个token允许被用来访问我们的“restapi”. 而scope里面的“profile”等scopes是对应另一个aud的值, 这些scopes来自IDP那里. 现在Access Token有这些claims, API也就能得到这些claims, 但是有时API还需要用户身份相关的claims. 修改IDP的ApiResource配置即可: 再次操作后, 查看token, 就可以看到我刚刚添加的那两个claim了: 而role这个claim, 在API里是可以被识别成角色的, 如果我在API的Action上设置权限如下: 那么, Nick这个用户就可以得到Country数据, 而Dave则会显示403 Forbidden: Identity Server 4 - Hybrid Flow - 保护API资源 标签:art home forbidden ESS val read 相关 允许 如何 原文地址:https://www.cnblogs.com/cgzl/p/9276278.html回顾 Hybrid Flow
保护API
Access Token
文章标题:Identity Server 4 - Hybrid Flow - 保护API资源
文章链接:http://soscw.com/index.php/essay/70093.html