ASP.NETCore中IdentityServer4如何实现Token令牌身份认证

这篇文章给大家介绍WebAPI中IdentityServer4如何实现Token令牌身份认证,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

威远网站建设公司创新互联建站,威远网站设计制作,有大型网站制作公司丰富经验。已为威远上1000+提供企业网站建设服务。企业网站搭建\成都外贸网站建设要多少钱,请找那个售后服务好的威远做网站的公司定做!

 开发提供数据的WebApi服务,最重要的是数据的安全性。那么对于我们来说如何确保提供的API服务的数据安全将会是需要思考的问题。在ASP.NET WebApi中我们应该如何保证我们的接口安全呢?  

在ASP.NET Core中使用的是目前最流行、功能最强大的身份授权以及访问控制的解决方案——IdentityServer4(认证和授权),它是一套专注于帮助使用.Net 技术的公司为现代应用程序建立标识和访问控制解决方案,包括单点登录、身份管理、授权和API安全。

二、什么是IdentityServer4

IdentityServer4 是一个免费的开源 OpenID Connect 和 OAuth 2.0 身份认证与授权框架,适用于 ASP.NET Core 平台,IdentityServer4 由 Dominick Baier 和 Brock Allen 两位大神创建和维护,您可以快捷的在应用程序中集成基于令牌的身份验证,单点登录和 API 访问控制,支持非常多的协议实现和可扩展点,IdentityServer4 由 OpenID 基金会正式认证,因此符合规范且可互操作,被微软作为 .NET 基金会项目的一部分,并根据其行为准则运行。

IdentityServer4是用于ASP.NET Core的OpenID Connect和OAuth 2.0框架。 

将IdentityServer4部署到您的应用中具备如下特点:

1)、用户认证服务

基于OpenID Connect实现的独立的认证服务实现对多平台(web, native, mobile, services)的集中认证

2)、API访问授权

为各种类型的客户机颁发api访问令牌,例如服务器到服务器、web应用程序、spa和native/mobile程序

3)、联合身份认证

支持外部身份提供者,如Azure Active Directory、Google、Facebook等

4)、定制化的实现

IdentityServer4的许多方面可以定制以满足您的需要,因为它是一个框架,而不是SaaS服务,所以可以通过编写代码来调整实现,以适应不同的场景

5)、熟的开源方案

使用许可的Apache2开源协议,允许在其之上构建商业产品,也作为.NET基金会支持的项目 (https://dotnetfoundation.org/projects?type=project&ps=10&pn=6)

6)、提供免费的商业支持

官方可以对使用者提供部分的免费商业支持

OpenId Connect用于认证(authentication),OAuth3.0用于授权(authorization)。

 IdentityServer4就是这样一个框架,IdentityServer4是为ASP.NET CORE量身定制的实现了OpenId Connect和OAuth3.0协议的认证授权中间件。

举个例子来解释认证和授权:
  你要登机,你需要出示你的身份证和机票,身份证是为了证明你张三确实是你张三,这就是认证( authentication );而机票是为了证明你张三确实买了票可以上飞机,这就是授权( authorization )。

ASP.NET Core中IdentityServer4如何实现Token令牌身份认证

ASP.NET Core WebAPI基于IdentityServer4实现Token令牌身份验证

三、ASP.NET Core WebAPI基于IdentityServer4实现Token令牌身份认证原理讲解

 IdentityServer4是一个框架,IdentityServer4是为ASP.NET CORE量身定制的实现了OpenId Connect和OAuth3.0协议的认证授权中间件。 

OAuth3.0四种模式:

1、授权码模式(authorization code)(支持refresh token—正宗的oauth3的授权模式)

2、简化模式(implicit)(不支持refresh token—为web浏览器应用设计)

3、密码模式(resource owner password credentials)(支持refresh token为前后分离单页应用设计)

4、客户端模式(client credentials)(不支持refresh token—(为纯后台api服务消费者设计))

这种模式直接根据client的id和密钥即可获取token,无需用户参与这种模式比较合适消费api的后端服务,比如拉取一组用户信息等不支持refresh token,主要是没有必要。

接下来我们使用客户端模式来实现一个IdentityServer4授权。

1、客户端直接用自身的信息向授权服务器请求token。

2、授权服务器验证信息后返回token。

其实IdentityServer4  还提供了我们自己去实现自定义授权模式!

ASP.NET Core中IdentityServer4如何实现Token令牌身份认证

ASP.NET Core WebAPI基于IdentityServer4实现Token令牌身份认证

四、ASP.NET Core基于IdentityServer4【客户端模式】实现Token令牌身份认证

适合场景:Web API与Web API通信

客户端凭证模式,是最简单的授权模式,因为授权的流程仅发生在Client与Identity Server之间。

该模式的适用场景为服务器与服务器之间的通信。比如对于一个电子商务网站,将订单和物流系统分拆为两个服务分别部署。订单系统需要访问物流系统进行物流信息的跟踪,物流系统需要访问订单系统的快递单号信息进行物流信息的定时刷新。而这两个系统之间服务的授权就可以通过这种模式来实现。

ASP.NET Core中IdentityServer4如何实现Token令牌身份认证

客户端模式(client credentials)

五、ASP.NET Core基于IdentityServer4【密码模式】实现Token令牌身份认证

适合场景:Web应用程序与Web API通信!

Resource Owner其实就是User,所以可以直译为用户名密码模式。密码模式相较于客户端凭证模式,多了一个参与者,就是User。通过User的用户名和密码向Identity Server申请访问令牌。

ASP.NET Core中IdentityServer4如何实现Token令牌身份认证

密码模式(resource owner password credentials)

六、思考与总结

1)、思考
请问 ids4 的客户端授权模式怎么去获取 refresh_token 呢?客户端授权不支持refresh_token!

Refresh tokens are supported for the following flows: authorization code, hybrid and resource owner password credential flow. The clients needs to be explicitly authorized to request refresh tokens by setting AllowOfflineAccess to true.

好像不支持刷新令牌,等token快过期时,你自己重新获取一个就可以了。

解决办法:

1、建议将token的过期时间设置长点或者需要与调用方约定好,需要定期来重新获取新的token。

2、Identityserver4中ResourceOwnerPassword 密码模式支持refresh_token。

2)、总结

密码模式(resource owner password credentials)(支持refresh token为前后分离单页应用设计)
客户端模式(client credentials)(不支持refresh token—(为纯后台api服务消费者设计))

也可以多种混合模式一起使用,具体查看IdentityServer4.Models.GrantTypes

关于WebAPI中IdentityServer4如何实现Token令牌身份认证就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


名称栏目:ASP.NETCore中IdentityServer4如何实现Token令牌身份认证
网站URL:http://myzitong.com/article/gieooh.html