第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

ASP.NET Core的身份認(rèn)證框架IdentityServer4--(5)自定義用戶登錄(通過接口登

標(biāo)簽:
C#

官网接口详解文档地址文档地址 (PS:可通过接口名称搜索相应接口信息。)

 一、修改服务端

1、修改Startup文件源码如下:

复制代码

namespace Server
{    public class Startup
    {        public void ConfigureServices(IServiceCollection services)
        {            //配置身份服务器与内存中的存储,密钥,客户端和资源            services.AddIdentityServer()
                .AddDeveloperSigningCredential()
                .AddInMemoryIdentityResources(Config.GetIdentityResources());//添加对OpenID Connect的支持
                .AddInMemoryApiResources(Config.GetApiResources())//添加api资源
                .AddInMemoryClients(Config.GetClients())//添加客户端
                .AddResourceOwnerValidator<LoginValidator>()//用户校验
                .AddProfileService<ProfileService>();
        }        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }            //添加到HTTP管道中。            app.UseIdentityServer();
        }
    }
}

复制代码

 2、修改config文件

复制代码

namespace Server
{    public class Config
    {        /// <summary>
        /// 添加对OpenID Connect的支持        /// </summary>
        /// <returns></returns>
        public static IEnumerable<IdentityResource> GetIdentityResources()
        {            return new List<IdentityResource>
            {                new IdentityResources.OpenId(), //必须要添加,否则报无效的scope错误
                new IdentityResources.Profile()
            };
        }        /// <summary>
        /// 范围定义系统中的API资源        /// </summary>
        /// <returns></returns>
        public static IEnumerable<ApiResource> GetApiResources()
        {            return new List<ApiResource>
            {                new ApiResource("api1", "My API")
            };
        }        /// <summary>
        /// 客户想要访问资源(又称范围)        /// </summary>
        /// <returns></returns>
        public static IEnumerable<Client> GetClients()
        {            // 客户端信息
            return new List<Client>
            {             //自定义客户端
             new Client
                {                    //客户端名称
                    ClientId = "client1",                    //客户端访问方式:密码验证
                    AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,                    //用于认证的密码加密方式
                    ClientSecrets =
                    {                        new Secret("secret".Sha256())
                    },                    //客户端有权访问的范围
                    AllowedScopes = { "api1",IdentityServerConstants.StandardScopes.OpenId, //必须要添加,否则报403 forbidden错误                  IdentityServerConstants.StandardScopes.Profile }
                }
            };
        }
    }
}

复制代码

3、新建LoginValidator类,用于用户校验

复制代码

namespace Server
{    /// <summary>
    /// 自定义用户登录校验    /// </summary>
    public class LoginValidator : IResourceOwnerPasswordValidator
    {        public LoginValidator()
        {

        }        /// <summary>
        /// 登录用户校验        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task ValidateAsync(ResourceOwnerPasswordValidationContext context)
        {            //根据context.UserName和context.Password与数据库的数据做校验,判断是否合法
            if (context.UserName == "test" && context.Password == "123")
            {
                context.Result = new GrantValidationResult(
                 subject: context.UserName,
                 authenticationMethod: "custom",
                 claims: GetUserClaims());
            }            else
            {                //验证失败
                context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant, "账号密码错误");
            }
        }        /// <summary>
        /// 可以根据需要设置相应的Claim        /// </summary>
        /// <returns></returns>
        private Claim[] GetUserClaims()
        {            return new Claim[]
            {            new Claim("UserId", 1.ToString()),            new Claim(JwtClaimTypes.Name,"test"),            new Claim(JwtClaimTypes.GivenName, "jaycewu"),            new Claim(JwtClaimTypes.FamilyName, "yyy"),            new Claim(JwtClaimTypes.Email, "test@qq.com"),            new Claim(JwtClaimTypes.Role,"admin")
            };
        }
    }
}

复制代码

4、新建ProfileService类,用于返回用户自定义信息

复制代码

namespace Server
{    /// <summary>
    /// 获取用户信息并返回给客户端    /// </summary>
    public class ProfileService : IProfileService
    {        /// <summary>
        /// 获取用户信息        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task GetProfileDataAsync(ProfileDataRequestContext context)
        {            try
            {                //用户信息
                var claims = context.Subject.Claims.ToList();                //获取用户信息
                context.IssuedClaims = claims.ToList();
            }            catch (Exception ex)
            {                //log your error            }
        }        /// <summary>
        /// 获取或设置一个值,该值指示主题是否处于活动状态并且可以接收令牌。        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task IsActiveAsync(IsActiveContext context)
        {
            context.IsActive = true;
        }
    }
}

复制代码

5、通过接口获取用户信息

5.1、用户登录接口:http://localhost:5000/connect/token

参数名说明是否必填示例
username用户名Ytest
password密码Y123
grant_type加密类型Ypassword
client_id客户端名称Yclient1
client_secret客户端加密类型Ysecret

 

 

 

 

 

效果图:

https://img1.sycdn.imooc.com//5b6d9b5300013e5410700567.jpg

5.2、获取用户信息接口:http://localhost:5000/connect/userinfo

参数是否必填说明 
AuthorizationY值的格式:key空格value

 

 

 

PS:key 的值为上面接口返回的 token_type 的值,value 为 access_token 的值。

通过调用上面两个接口,完成登录授权。

效果图:

 https://img1.sycdn.imooc.com//5b6d9b5c000117d810710488.jpg

 

原文出处:https://www.cnblogs.com/miskis/p/9438411.html

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消