完成用户凭据生成相关方法,登录相关接口实现
This commit is contained in:
parent
a3556cf246
commit
4e55b1938d
|
@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Mvc;
|
|||
using Microsoft.Extensions.Logging;
|
||||
using FAuth.DataBase.Tables;
|
||||
using Microsoft.AspNetCore.Mvc.ModelBinding;
|
||||
using FAuth.Extensions.Decryptor;
|
||||
|
||||
namespace FAuth.Controllers.api
|
||||
{
|
||||
|
@ -15,7 +16,16 @@ namespace FAuth.Controllers.api
|
|||
/// </summary>
|
||||
public class UserController:ApiControllerBase<UserController>
|
||||
{
|
||||
public UserController(ILogger<UserController> logger,IServiceProvider service) : base(logger,service) {
|
||||
public IUserTicketDryptor UserTicketDryptor { get; set; }
|
||||
|
||||
public UserController(ILogger<UserController> logger,IServiceProvider service,IUserTicketDryptor userTicketDryptor)
|
||||
: base(logger,service) {
|
||||
|
||||
if(logger is null)
|
||||
throw new ArgumentNullException(nameof(logger));
|
||||
if(service is null)
|
||||
throw new ArgumentNullException(nameof(service));
|
||||
this.UserTicketDryptor = userTicketDryptor ?? throw new ArgumentNullException(nameof(userTicketDryptor));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -29,7 +39,9 @@ namespace FAuth.Controllers.api
|
|||
public CheckUserResult CheckUser(string userName,string password) {
|
||||
return new CheckUserResult {
|
||||
Result = userName == password,
|
||||
Ticket = Guid.NewGuid().ToString(),
|
||||
Ticket = this.UserTicketDryptor.Encrypt(new UserTicketModel {
|
||||
UserName = userName,
|
||||
}),
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -41,8 +53,9 @@ namespace FAuth.Controllers.api
|
|||
[HttpPost]
|
||||
[ProducesResponseType(typeof(UserInfo),200)]
|
||||
public UserInfo GetUserByTicket([BindRequired]string ticket) {
|
||||
var userTicketModel = this.UserTicketDryptor.Decrypt(ticket);
|
||||
return new UserInfo {
|
||||
UserName = "aaa"
|
||||
UserName = userTicketModel.UserName,
|
||||
};
|
||||
}
|
||||
|
||||
|
|
22
FAuth/Extensions/Decryptor/IUserTicketDryptor.cs
Normal file
22
FAuth/Extensions/Decryptor/IUserTicketDryptor.cs
Normal file
|
@ -0,0 +1,22 @@
|
|||
namespace FAuth.Extensions.Decryptor
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户票据加密提供器
|
||||
/// </summary>
|
||||
public interface IUserTicketDryptor
|
||||
{
|
||||
/// <summary>
|
||||
/// 通过票据获取用户信息
|
||||
/// </summary>
|
||||
/// <param name="content">用户票据</param>
|
||||
/// <returns>用户信息</returns>
|
||||
public UserTicketModel Decrypt(string content);
|
||||
|
||||
/// <summary>
|
||||
/// 通过用户信息生成用户票据
|
||||
/// </summary>
|
||||
/// <param name="user">用户信息</param>
|
||||
/// <returns>用户票据</returns>
|
||||
public string Encrypt(UserTicketModel user);
|
||||
}
|
||||
}
|
35
FAuth/Extensions/Decryptor/ServiceCollentionExtent.cs
Normal file
35
FAuth/Extensions/Decryptor/ServiceCollentionExtent.cs
Normal file
|
@ -0,0 +1,35 @@
|
|||
using System;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace FAuth.Extensions.Decryptor
|
||||
{
|
||||
/// <summary>
|
||||
/// 扩展IServiceCollection注册IUserTicketDryptor
|
||||
/// </summary>
|
||||
public static class ServiceCollentionExtent
|
||||
{
|
||||
/// <summary>
|
||||
/// 通过显示配置注册IUserTicketDryptor
|
||||
/// </summary>
|
||||
/// <param name="service">服务集合</param>
|
||||
/// <param name="action">配置选项的方法</param>
|
||||
/// <returns>服务集合</returns>
|
||||
public static IServiceCollection AddUserTicketDryptor(this IServiceCollection service,Action<UserTicketDecryptorOption> action) {
|
||||
service.Configure<UserTicketDecryptorOption>(action);
|
||||
service.AddSingleton<IUserTicketDryptor,UserTicketDryptor>();
|
||||
return service;
|
||||
}
|
||||
/// <summary>
|
||||
/// 通过提供配置节点信息注册IUserTicketDryptor
|
||||
/// </summary>
|
||||
/// <param name="services">服务集合</param>
|
||||
/// <param name="section">配置文件节点</param>
|
||||
/// <returns>服务集合</returns>
|
||||
public static IServiceCollection AddUserTicketDryptor(this IServiceCollection services,IConfigurationSection section) {
|
||||
services.Configure<UserTicketDecryptorOption>(section);
|
||||
services.AddSingleton<IUserTicketDryptor,UserTicketDryptor>();
|
||||
return services;
|
||||
}
|
||||
}
|
||||
}
|
16
FAuth/Extensions/Decryptor/UserTicketDecryptorOption.cs
Normal file
16
FAuth/Extensions/Decryptor/UserTicketDecryptorOption.cs
Normal file
|
@ -0,0 +1,16 @@
|
|||
using Microsoft.Extensions.Options;
|
||||
|
||||
namespace FAuth.Extensions.Decryptor
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户加密配置
|
||||
/// </summary>
|
||||
public class UserTicketDecryptorOption:IOptions<UserTicketDecryptorOption>
|
||||
{
|
||||
public UserTicketDecryptorOption Value => this;
|
||||
/// <summary>
|
||||
/// 加密用key
|
||||
/// </summary>
|
||||
public string Key { get; set; }
|
||||
}
|
||||
}
|
52
FAuth/Extensions/Decryptor/UserTicketDryptor.cs
Normal file
52
FAuth/Extensions/Decryptor/UserTicketDryptor.cs
Normal file
|
@ -0,0 +1,52 @@
|
|||
using System;
|
||||
using Falcon.Extend;
|
||||
using Microsoft.Extensions.Options;
|
||||
|
||||
namespace FAuth.Extensions.Decryptor
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户凭据实现
|
||||
/// </summary>
|
||||
public class UserTicketDryptor:IUserTicketDryptor
|
||||
{
|
||||
/// <summary>
|
||||
/// 基础加密解密服务
|
||||
/// </summary>
|
||||
public ICryptoService CryptoService { get; set; }
|
||||
/// <summary>
|
||||
/// 用户凭据配置
|
||||
/// </summary>
|
||||
public UserTicketDecryptorOption Option { get; set; }
|
||||
/// <summary>
|
||||
/// 基础Json序列化提供器
|
||||
/// </summary>
|
||||
public IJsonProvider JsonProvider { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 构造用户凭据实现
|
||||
/// </summary>
|
||||
/// <param name="s">基础加密解密提供器</param>
|
||||
/// <param name="option">凭据选项</param>
|
||||
/// <param name="json">Json序列化器</param>
|
||||
public UserTicketDryptor(ICryptoService s,IOptions<UserTicketDecryptorOption> option,IJsonProvider json) {
|
||||
this.CryptoService = s ?? throw new ArgumentNullException(nameof(s));
|
||||
this.Option = option?.Value ?? throw new ArgumentNullException(nameof(option));
|
||||
this.JsonProvider = json ?? throw new ArgumentNullException(nameof(json));
|
||||
}
|
||||
/// <summary>
|
||||
/// 通过用户凭据获得用户信息
|
||||
/// </summary>
|
||||
/// <param name="content">用户凭据</param>
|
||||
/// <returns>用户信息</returns>
|
||||
public UserTicketModel Decrypt(string content) =>
|
||||
this.JsonProvider.GetObj<UserTicketModel>(this.CryptoService.Decrypt(content,this.Option.Key));
|
||||
|
||||
/// <summary>
|
||||
/// 通过用户信息生成用户凭据
|
||||
/// </summary>
|
||||
/// <param name="user">用户信息</param>
|
||||
/// <returns>用户凭据</returns>
|
||||
public string Encrypt(UserTicketModel user) =>
|
||||
this.CryptoService.Encrypt(this.JsonProvider.GetJson(user),Option.Key);
|
||||
}
|
||||
}
|
13
FAuth/Extensions/Decryptor/UserTicketModel.cs
Normal file
13
FAuth/Extensions/Decryptor/UserTicketModel.cs
Normal file
|
@ -0,0 +1,13 @@
|
|||
namespace FAuth.Extensions.Decryptor
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户票据中的用户信息
|
||||
/// </summary>
|
||||
public class UserTicketModel
|
||||
{
|
||||
/// <summary>
|
||||
/// 登录用户名称
|
||||
/// </summary>
|
||||
public string UserName { get; set; }
|
||||
}
|
||||
}
|
|
@ -6,7 +6,7 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Falcon.Extend" Version="1.1.1" />
|
||||
<PackageReference Include="Falcon.Extend" Version="1.2.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.Caching.Redis" Version="2.2.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.3" />
|
||||
<PackageReference Include="NLog" Version="4.7.0" />
|
||||
|
@ -20,8 +20,4 @@
|
|||
<None Include="..\.editorconfig" Link=".editorconfig" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Extensions\Decryptor\" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
@ -4,6 +4,7 @@ using System.Text.Encodings.Web;
|
|||
using System.Text.Unicode;
|
||||
using Falcon.Extend;
|
||||
using FAuth.DataBase;
|
||||
using FAuth.Extensions.Decryptor;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.Extensions.Caching.Redis;
|
||||
|
@ -59,6 +60,10 @@ namespace FAuth
|
|||
c.IncludeXmlComments(xmlPath,true);
|
||||
c.AddXmlEnumEnable(xmlPath);
|
||||
});
|
||||
//注册用户票据生成器
|
||||
services.AddAESCrypto();
|
||||
var UTDO = Configuration.GetSection("UserTicketDecryptorOption");
|
||||
services.AddUserTicketDryptor(UTDO);
|
||||
}
|
||||
|
||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||
|
|
|
@ -13,5 +13,8 @@
|
|||
"Redis": {
|
||||
"InstanceName": "",
|
||||
"Configuration": "127.0.0.1:7001,password=123654"
|
||||
},
|
||||
"UserTicketDecryptorOption": {
|
||||
"Key": "abcd"
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user