手机版

IdnentiyServer使用客户端凭据访问应用程序接口的实例代码

时间:2021-08-29 来源:互联网 编辑:宝哥软件园 浏览:

情景如下:一个客户端要访问一个api,不需要用户登录,但是又不想直接暴露美国石油学会(美国石油协会)给外部使用,这时可以使用identityserver添加访问权限。

客户端通过标识符和秘密访问识别服务器的令牌端点,获取访问令牌

接着客户端再使用访问令牌作为头部验证访问webapi。(webapi已经添加了identityserver的相关验证)。

代码实现:其中' http://localhost:5000 '是identityserver地址,' http://localhost:5001 '是美国石油学会(美国石油协会)地址

identityserver:在identityserver添加美国石油学会(美国石油协会)和客户端,如下所示:定义了一个api1资源,客户端客户端客户。客户端指定为ClientCredentials(客户端凭据)模式,并允许其访问第一页。

公共类Config { //作用域定义您的系统中的应用程序接口资源public static IEnumerableApiResource GetApiResources(){返回新的ListApiResource {新的API资源(' API 1 ',' My API ')};} //想要访问资源(也称为作用域)的客户端公共静态IEnumerableclient GetClients(){//客户端凭据客户端返回新列表客户端{新客户端{ ClientId='client ',AllowedGrantTypes=GrantTypes .客户端凭据,客户端机密={新机密('机密')。sha 256())},AllowedScopes={ ' api1 ' } } }} }在启动配置identityserver如下:

公共类启动{ public void ConfigureServices(IServiceCollection services){//使用内存中的存储、密钥、客户端和作用域服务配置身份服务器AddIdentityServer().AddDeveloperSigningCredential().添加内存资源(配置GetApiResources()).添加内存客户端(配置. GetClients());}公共void Configure(IApplicationBuilder应用程序,ihostingenvirmentenv){ if(env .IsDevelopment()) { app .usedeveloper异常页();}应用程序.UseIdentityServer();} }WebApi:在美国石油学会(美国石油协会)添加identityserver的验证,代码如下,其中定义了同样的美国石油学会(美国石油协会)名称,' http://localhost:5000 '是identityserver的地址。

公共类启动{ public void ConfigureServices(IServiceCollection services){ services } .AddMvcCore().AddAuthorization().AddJsonFormatters();服务。添加身份验证("承载")。AddIdentityServerAuthentication(选项={ options .权限=' http://localhost:5000选项RequireHttpsMetadata=false选项apiNAmE=' API 1 });}公共void Configure(IApplicationBuilder应用程序){ app .UseAuthentication();应用程序.UseMvc();} }添加一个需要验证的控制器:

[路由('[控制器]')][授权]公共类标识符控制器:控制器使用{ [HttpGet]公共IActionResult Get(){ 0返回新的JsonResult(来自用户中的c .声明选择新的{ c。类型,c。值});} }客户端:

这里使用里识别模型类库

实际请求如下:

1.获取访问令牌:http://localhost :5000/connect/令牌?client _ id=client _ secret=secret grant _ type=client _ credentialsscope=API 1

2.请求api1

http://localhost :5001/identityheaderauthorization : access token public类程序{公共静态void Main(字符串[]个参数)=MainAsync().GetAwaiter().GetResult();私有静态异步任务MainAsync() { //获取识别服务器的各个端点地址var disco=等待发现客户端GetAsync(' http://localhost :5000 ');if (disco .IsError){ 0控制台WriteLine(迪斯科。错误);返回;} //获取具有api1访问权限的访问令牌var令牌客户端=新令牌客户端(disco .令牌端点,"客户端"、"机密");var令牌响应=等待令牌客户端requestclientcredentiassasync(' API 1 ');如果(令牌响应I error){ 0控制台。写线(令牌响应。错误);返回;}控制台。写线(令牌响应. JSON);控制台写入行(' \ n \ n ');//设置访问令牌为超文本传送协议(超文本传输协议的缩写)请求头,并访问API 1 var客户端=new Http client();客户SetBearerToken(令牌响应. AccessToken);定义变量响应=等待客户端GetAsync(' http://localhost :5001/identity ');if(!回应issccessstatuscode){ Console .WriteLine(响应状态代码);} else { var内容=等待响应内容。ReadAsStringAsync();控制台写线(JArray .解析(内容));} } }ps:

1.这里默认的访问令牌为智威汤逊广告公司格式,客户端访问美国石油学会(美国石油协会)时美国石油学会(American Petroleum Institute)只需要在启动的时候访问身份获取秘钥即可。若为referencetoken,客户端访问美国石油学会(美国石油协会)时美国石油学会(American Petroleum Institute)需要授权访问的都会再请求一次identityserver,而且美国石油学会(美国石油协会)必须设置秘钥,客户端设置AccessTokenType属性为参考文献。

2.可自定义访问令牌生存期(令牌存活时间),默认是3600秒,即一小时

总结

以上所述是小编给大家介绍的识别服务器-使用客户端凭据访问原料药,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

版权声明:IdnentiyServer使用客户端凭据访问应用程序接口的实例代码是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。