IdentitySrever4

一、身份认证和授权

       1.1、身份认证

                当客户端访问服务器端资源时,验证客户端是否合法的一种机制。

       1.2、授权

                当客户端经过身份认证后,能够有限的访问服务端资源的一种机制。

       1.3、身份认证和授权方式

    1. Base认证:Base64编码认证(https)  。
    2. Digest认证:MD5消息摘要认证(https) 。
    3. Bearer认证:基于token(电子身份证)认证,将用户信息等其他信息转换为token,然后进行token认证。token认证是一种无状态认证方式,能够进行无限扩展,特别适合做单点登录。包括两种:OAuth 2.0,JWT

        1.5、OAth 2.0 与 JWT区别

                 OAth 2.0 属于引用型token,无用户相关信息。

                 JWT属于自包含token,有用户相关信息。如地址,电话,id等。

         1.6、实际项目方案

                  实际项目方案中,大多采用Bearer进行身份认证和授权。

         1.7、关系

                 OAuth 2.0 是一种授权框架。用于应用程序之间安全的共享用户资源。它允许用户授权第三方应用程序访问他们的资源。而不必将用户名和密码提供给第三方应用程序  。它定义了授权流程和令牌的颁发、刷新和撤销等机制,但没有规定具体的令牌格式。

                 JWT是一种令牌的具体实现方式。 轻量级的、基于JSON的安全令牌,用于在用户和服务之间传递声明。在OAuth 2.0中,JWT通常被用作访问令牌(access token)或者身份验证令牌(identity token),用于在客户端和资源服务器之间传递用户的授权信息。OAuth 2.0和JWT之间的关系是,OAuth 2.0定义了授权流程和令牌的使用规范,而JWT是在这个框架下用于实现令牌的一种具体格式。OAuth 2.0可以使用JWT作为访问令牌,以实现安全的用户授权和资源访问。

                  IdentityServer是一个开源的身份认证和授权服务器,它实现了OpenID Connect和OAuth 2.0协议,可以作为一个独立的认证服务器,也可以与其他应用程序集成。它提供了一种安全的方式来管理用户身份和授权访问资源。  

        1.8、授权模式            

   

二、IdentityServer4

       2.1、功能

               保护资源,使用本地账户或通过外部身份提供程序,对用户进行身份验证。

               提供会话管理和单点登录,管理和验证客户机,向客户发出表示和访问令牌,验证令牌。

      2.2、概念

    1. 用户。使用已注册(指id4中已经注册)访问资源的人。   
    2. 客户端。从id4请求令牌的软件(app等),既可以通过身份认证令牌来验证  识别用户身份,又可以通过授权令牌来访问服务端的资源。前提是客户端必须在申请令牌前    已经在Id4服务中注册过。
    3.  资源。就是用id4保护的东西,可以是用户的身份数据或者api资源。   每个资源有位移名称,客户端使用唯一名称来确定想访问哪一个资源。(实际上,Id4服务端已经配置好那个客户端可以访问哪个资源,不是客户端想访问哪个就能访问,都提前安排了的。)用户身份信息实际由一组claim组成,如姓名或者邮件都会包含在身份信息中(将来通过Id4校验后都会返回给被调用的客户端)。
    4. 身份令牌。token,jwt。(例如sso其实主要就是用于身份认证身份令牌)指的就是对认证过程的描述。它至少要标识某个用户(Called the sub aka subject claim)的主身份信息,和该用户的认证时间和认证方式。但是身份令牌可以包含额外的身份数据,具体开发者可以自行设定,但是一般情况为了确保数据传输的效率,开发者一般不做过多额外的设置,大家也可以根据使用场景自行决定。
    5. 访问令牌。(用于做客户端访问授权)。访问令牌允许客户端访问某个 API 资源。客户端请求到访问令牌,然后使用这个令牌来访问 API资源。访问令牌包含了客户端和用户(如果有的话,这取决于业务是否需要,但通常不必要)的相关信息,API通过这些令牌信息来授予客户端的数据访问权限。

三、项目

        3.1、IdentityServer中心

                 1、新建Core API。然后新增Config类                

 

using IdentityServer4.Models;

namespace Id4Center
{
    public class Config
    {
        /// <summary>
        /// 添加Scope
        /// </summary>
        /// <returns></returns>
        public static List<ApiScope> GetApiResources()
        {
            return new List<ApiScope>
            {
                new ApiScope("ApiOne")
            };
        }

        /// <summary>
        /// 添加客户端
        /// </summary>
        /// <returns></returns>
        public static List<Client> GetClients()
        {
            return new List<Client>
            {
                new Client
                {
                    ClientId = "Client", // 客户端Id
                    ClientName = "ClientApi", // 客户端名称
                    AllowedGrantTypes = GrantTypes.ClientCredentials, //创建ClientCredentials模式的客户端
                    ClientSecrets =
                    {
                        new Secret("secret".Sha256()) //带验证码
                    },
                    // 客户端有权访问的范围
                    AllowedScopes = { "ApiOne" }
                }
            };
        }
    }
}
View Code

               2、Program配置

                     我使用的是.NET Core 7,要是Core 5或者5以下版本,在startup配置。

#region IdentityServer 4 配置

builder.Services.AddIdentityServer()
         .AddDeveloperSigningCredential() //开发者凭证,在首次启动时,IdentityServer将为您创建一个开发人员签名密钥,该文件名为tempkey.jwk。您不必将该文件签入源代码管理中,如果不存在该文件将被重新创建。
         .AddInMemoryApiScopes(Config.GetApiResources()) // 配置资源
         .AddInMemoryClients(Config.GetClients()); // 配置客户端

#endregion
//添加IdentityServer
app.UseIdentityServer();
//添加授权
app.UseAuthentication();

          3、运行测试

              URl地址: localhost:44355/.well-known/openid-configuration

 

      4、postman测试token地址     

              需要注意的几个地方已经标注出来了。      

          3.2、整体逻辑

 四、运行截图

          4.1、鉴权中心截图

                   运行地址:localhost:5000/.well-known/openid-configuration

                       特别注意这个:"token_endpoint": "http://localhost:5000/connect/token",他是获取token的url地址。

              4.2、资源中心测试                     

            4.3、客户端的截图

 五、说明

        运行客户端程序,需要先运行鉴权中心和资源中心。可以用文件路径+cmd+dotnet run     

 六、代码

         鉴权中心地址:链接

        资源中心地址:链接

        客户端地址:链接

七、小结

        本文所有程序都已全部测试通过。

 

 

 

 

 

 

 

                      

 

posted on 2024-03-26 17:23  木乃伊人  阅读(6)  评论(0编辑  收藏  举报

导航