/// <summary> /// 验证用户 /// </summary> /// <param name="loginName"></param> /// <param name="password"></param> /// <returns></returns> private async Task <List <Claim> > ValidateUserAsync(string openId, string unionId) { //TODO 这里可以通过openId 和unionId 来查询用户信息,我这里为了方便测试还是直接写测试的openId 相关信息用户 var user = OAuthMemoryData.GetWeiXinOpenIdTestUsers(); if (user == null) { //注册用户 } return(new List <Claim>() { new Claim(ClaimTypes.Name, $"{openId}"), }); }
/// <summary> /// 验证用户 /// </summary> /// <param name="loginName"></param> /// <param name="password"></param> /// <returns></returns> #pragma warning disable CS1998 // 此异步方法缺少 "await" 运算符,将以同步方式运行。请考虑使用 "await" 运算符等待非阻止的 API 调用,或者使用 "await Task.Run(...)" 在后台线程上执行占用大量 CPU 的工作。 private async Task <List <Claim> > ValidateUserAsync(string openId, string unionId) #pragma warning restore CS1998 // 此异步方法缺少 "await" 运算符,将以同步方式运行。请考虑使用 "await" 运算符等待非阻止的 API 调用,或者使用 "await Task.Run(...)" 在后台线程上执行占用大量 CPU 的工作。 { //TODO 这里可以通过openId 和unionId 来查询用户信息,我这里为了方便测试还是直接写测试的openId 相关信息用户 var user = OAuthMemoryData.GetWeiXinOpenIdTestUsers(); if (user == null) { //注册用户 } return(new List <Claim>() { new Claim(ClaimTypes.Name, $"{openId}"), }); }
/// <summary> /// 验证用户 /// </summary> /// <param name="loginName"></param> /// <param name="password"></param> /// <returns></returns> private async Task <List <Claim> > ValidateUserAsync(string loginName, string password) { //TODO 这里可以通过用户名和密码到数据库中去验证是否存在, // 以及角色相关信息,我这里还是使用内存中已经存在的用户和密码 var user = OAuthMemoryData.GetTestUsers(); if (user == null) { throw new Exception("登录失败,用户名和密码不正确"); } return(new List <Claim>() { new Claim(ClaimTypes.Name, $"{loginName}"), }); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddControllers(); #region 内存方式 services.AddIdentityServer() .AddDeveloperSigningCredential() .AddInMemoryApiResources(OAuthMemoryData.GetApiResources()) .AddInMemoryClients(OAuthMemoryData.GetClients()) .AddTestUsers(OAuthMemoryData.GetTestUsers()); #endregion services.AddAuthorization(); services.AddAuthentication("Bearer") .AddIdentityServerAuthentication(options => { options.Authority = "http://localhost:5000"; //配置Identityserver的授权地址 options.RequireHttpsMetadata = false; //不需要https options.ApiName = OAuthConfig.UserApi.ApiName; //api的name,需要和config的名称相同 }); }
/// <summary> /// 验证用户(角色Demo 专用方法) /// 这里和之前区分,主要是为了保留和博客同步源代码 /// </summary> /// <param name="loginName"></param> /// <param name="password"></param> /// <returns></returns> private async Task <List <Claim> > ValidateUserByRoleAsync(string loginName, string password) { //TODO 这里可以通过用户名和密码到数据库中去验证是否存在, // 以及角色相关信息,我这里还是使用内存中已经存在的用户和密码 var user = OAuthMemoryData.GetUserByUserName(loginName); if (user == null) { throw new Exception("登录失败,用户名和密码不正确"); } //下面的Claim 声明我为了演示,硬编码了, //实际生产环境需要通过读取数据库的信息并且来声明 return(new List <Claim>() { new Claim(ClaimTypes.Name, $"{user.UserName}"), new Claim(EnumUserClaim.DisplayName.ToString(), user.DisplayName), new Claim(EnumUserClaim.UserId.ToString(), user.UserId.ToString()), new Claim(EnumUserClaim.MerchantId.ToString(), user.MerchantId.ToString()), new Claim(JwtClaimTypes.Role.ToString(), user.Role.ToString()) }); }