认证

目前的认证体系使用的是SSO,对应的Nuget包是Aegis.Authorization.SSO,目前提供的版本是2.0.3

同时还需要引入Aegis.Core.Authorization,这个包提供了CurrentUserTokenHanlder等基本认证处理类。

启用认证和鉴权

Component.deps.json中的Services节点中确定包含了Authorization 注意此时只是开启了基础认证和鉴权,请确保引用认证和鉴权的实现组件,否则会报错。

现有 SSO认证&鉴权组件可供使用 如果确定要使用SsoAuthorize,请在Component.deps.json且中也包含它,且SsoAuthorize顺序应该在Authorization后面。

请确保在AppSettings或者加载的配置文件中包含SsoAuthorize节点的配置,具体如下:

"SSOAuthorize": {  
  "Host": "http://10.11.13.75:30010/",   //SSO 远程路径
  "AppCode": "",   //系统Code
  "UserCode": "sys",   //接口用户名
  "Password": "App1234."   //接口密码
},

如何获取当前用户

前端在请求接口的时候加入对应的HeaderAuthorization,并且传入具体的Token,表现为Bearer开头的Token Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJJU1MiOiJTU08iLCJTVUIiOiJwdWJsaWMiLCJJQVQiOiIxNjk0NTk4NjQ2IiwiRVhQIjoiMjAxMDI0NjY0NiIsIkpUSSI6ImUzYmJlMTVkLTk5NmUtNGM1Ni05MmZjLTA4NTU4Y2UxYzMwMSJ9.FILF7psfjlp61P9mDmrHH3ZlCj9AtsnY2dA1yhEAEPk

在传入Token后,只要该Token对应的用户确实已登录,后端就能通过CurrentUser.Value准确的获取到对应的登录用户。对应的数据结构如下

public class CustomeUser  
{  
    /// <summary>  
    /// 用户唯一标识  
    /// </summary>  
    public string UserIdentity { get; set; }  

    /// <summary>  
    /// 具体Token  
    /// </summary>    
    public string Token { get; set; }  

    /// <summary>  
    /// 过期时间  
    /// </summary>  
    public DateTime ExpireAt { get; set; }  

    /// <summary>  
    /// 自定义用户信息  
    /// </summary>  
    public object UserInfo { get; set; }  
}

使用CurrentUser.Value.UserInfo就能获取到ISsoUserAdapter适配后的用户信息。也就是说这里的UserInfo实际上就是上面SsoUserAdapter.GetUser的返回值。

Aegis.Authorization.SSO中提供了扩展方法支持CurrentUser.Value.SsoUser()的方法来快速获取SsoUser用户实例。本质上是将CurrentUser.Value.UserInfo转换为SsoUserModel。所以只需要调用一次并存起来就行。

用户自定义字典

Aegis.Core.Authorization 为用户提供了额外信息存储的方式,方便业务系统存储用户的额外信息。用法如下,对应的value处存储的是object类型,注意在存储值类型的时候就会出现装箱拆箱的情况,请尽量传递引用类型进去。

CurrentUser.Value.Set("keyName",1); //设置内容,如果传值类型会触发装箱

var number = CurrentUser.Value.Get("keyName"); //获取内容


认证失败与过期机制

当使用[ApiAuthorize]标注Controller或者对应的控制器方法后,如果框架获取不到当前用户CurrentUser.Value获取不到数据的情况下,会返回Http状态码为401的错误信息,告知前端需要跳转登录页面。

使用[AllowAnonymous]标注即可在没有Token的情况下进入方法内,常用与登录和用户信息设置。

目前框架内的ApiControllerBase全都带上了[ApiAuthorize],之后会去掉。

目前的SSO没有过期机制,之后会接入过期与刷新。


如何扩展

当前认证体系可以接入大量扩展,提供以下接口供扩展

接口名 用途
IUserManagaer 用户数据储存管理接口,当前认证后的用户的管理接口,比如默认就是存在内存里,之后还可以扩展存在Redis里、数据库里等
IAuthorizeManager 具体认证管理接口,用于提供具体的认证流程,目前只提供了SSO的认证管理

开发模式快速验证

DEBUG模式下,可以使用简单Token来直接通过认证和鉴权,目前可以直接传入1来快速获取一个UserName为1的Fake用户。

DEBUG模式下依然支持使用正常用户查询,在RELEASE模式下只能通过正常鉴权。

版本支持需求:

  • Aegis.Core.Authorization > 2.0.2-preview1
  • Aegis.Authorization.SSO > 2.0.3

results matching ""

    No results matching ""