完成用户凭据生成相关方法,登录相关接口实现
This commit is contained in:
parent
a3556cf246
commit
4e55b1938d
|
@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using FAuth.DataBase.Tables;
|
using FAuth.DataBase.Tables;
|
||||||
using Microsoft.AspNetCore.Mvc.ModelBinding;
|
using Microsoft.AspNetCore.Mvc.ModelBinding;
|
||||||
|
using FAuth.Extensions.Decryptor;
|
||||||
|
|
||||||
namespace FAuth.Controllers.api
|
namespace FAuth.Controllers.api
|
||||||
{
|
{
|
||||||
|
@ -15,7 +16,16 @@ namespace FAuth.Controllers.api
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class UserController:ApiControllerBase<UserController>
|
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>
|
/// <summary>
|
||||||
|
@ -29,7 +39,9 @@ namespace FAuth.Controllers.api
|
||||||
public CheckUserResult CheckUser(string userName,string password) {
|
public CheckUserResult CheckUser(string userName,string password) {
|
||||||
return new CheckUserResult {
|
return new CheckUserResult {
|
||||||
Result = userName == password,
|
Result = userName == password,
|
||||||
Ticket = Guid.NewGuid().ToString(),
|
Ticket = this.UserTicketDryptor.Encrypt(new UserTicketModel {
|
||||||
|
UserName = userName,
|
||||||
|
}),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,8 +53,9 @@ namespace FAuth.Controllers.api
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
[ProducesResponseType(typeof(UserInfo),200)]
|
[ProducesResponseType(typeof(UserInfo),200)]
|
||||||
public UserInfo GetUserByTicket([BindRequired]string ticket) {
|
public UserInfo GetUserByTicket([BindRequired]string ticket) {
|
||||||
|
var userTicketModel = this.UserTicketDryptor.Decrypt(ticket);
|
||||||
return new UserInfo {
|
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>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<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.Caching.Redis" Version="2.2.0" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.3" />
|
<PackageReference Include="Microsoft.Extensions.Logging" Version="3.1.3" />
|
||||||
<PackageReference Include="NLog" Version="4.7.0" />
|
<PackageReference Include="NLog" Version="4.7.0" />
|
||||||
|
@ -20,8 +20,4 @@
|
||||||
<None Include="..\.editorconfig" Link=".editorconfig" />
|
<None Include="..\.editorconfig" Link=".editorconfig" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<Folder Include="Extensions\Decryptor\" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
@ -4,6 +4,7 @@ using System.Text.Encodings.Web;
|
||||||
using System.Text.Unicode;
|
using System.Text.Unicode;
|
||||||
using Falcon.Extend;
|
using Falcon.Extend;
|
||||||
using FAuth.DataBase;
|
using FAuth.DataBase;
|
||||||
|
using FAuth.Extensions.Decryptor;
|
||||||
using Microsoft.AspNetCore.Builder;
|
using Microsoft.AspNetCore.Builder;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.Extensions.Caching.Redis;
|
using Microsoft.Extensions.Caching.Redis;
|
||||||
|
@ -59,6 +60,10 @@ namespace FAuth
|
||||||
c.IncludeXmlComments(xmlPath,true);
|
c.IncludeXmlComments(xmlPath,true);
|
||||||
c.AddXmlEnumEnable(xmlPath);
|
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.
|
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||||
|
|
|
@ -13,5 +13,8 @@
|
||||||
"Redis": {
|
"Redis": {
|
||||||
"InstanceName": "",
|
"InstanceName": "",
|
||||||
"Configuration": "127.0.0.1:7001,password=123654"
|
"Configuration": "127.0.0.1:7001,password=123654"
|
||||||
|
},
|
||||||
|
"UserTicketDecryptorOption": {
|
||||||
|
"Key": "abcd"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user