Exemple #1
0
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        //https://mp.weixin.qq.com/s/3CCyvn2FUHtchIx8xhJHrw
        public void ConfigureServices(IServiceCollection services)
        {
            //services.AddControllers();
            services.AddControllersWithViews();
            #region 内存方式
            //services.AddIdentityServer()
            //    .AddDeveloperSigningCredential()
            //    .AddInMemoryApiResources(OAuthMemoryData.GetApiResources())
            //    .AddInMemoryClients(OAuthMemoryData.GetClients())
            //    .AddTestUsers(OAuthMemoryData.GetTestUsers());

            #endregion

            #region 数据库存储方式 1
            //services.AddIdentityServer()
            //    .AddDeveloperSigningCredential()
            //    .AddInMemoryApiResources(OAuthMemoryData.GetApiResources())
            //    .AddInMemoryClients(OAuthMemoryData.GetClients())
            //    //.AddTestUsers(OAuthMemoryData.GetTestUsers());
            //    .AddResourceOwnerValidator<ResourceOwnerPasswordValidator>();
            #endregion

            #region 数据库存储方式 2
            services.AddIdentityServer()
            .AddDeveloperSigningCredential()
            .AddInMemoryApiResources(OAuthMemoryData.GetApiResources())
            //.AddInMemoryClients(OAuthMemoryData.GetClients())
            .AddClientStore <ClientStore>()
            .AddResourceOwnerValidator <ResourceOwnerPasswordValidator>();
            #endregion
        }
        /// <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().Where(x => x.Username == loginName && x.Password == password).FirstOrDefault();

            if (user == null)
            {
                // throw new Exception("登录失败,用户名和密码不正确");
                return(null);
            }

            //var clamis = new List<Claim>();
            //clamis.Add(new Claim(ClaimTypes.Name, "Alun"));
            //clamis.Add(new Claim(ClaimTypes.Role, "Users"));
            //var identity = new ClaimsIdentity(clamis, "MyLogin");

            //ClaimsPrincipal principal = new ClaimsPrincipal(identity);


            return(new List <Claim>()
            {
                new Claim(ClaimTypes.Name, $"{loginName}")
                //new Claim("returnUrl", $"wwww.baidu.com"),
            });
        }
        public async Task <Client> FindClientByIdAsync(string clientId)
        {
            #region 用户名密码
            var memoryClients = OAuthMemoryData.GetClients();
            if (memoryClients.Any(oo => oo.ClientId == clientId))
            {
                return(memoryClients.FirstOrDefault(oo => oo.ClientId == clientId));
            }
            #endregion

            #region 通过数据库查询Client 信息
            return(GetClient(clientId));

            #endregion
        }