IdentityServer4 密码模式认证
程序员文章站
2022-06-28 20:39:36
授权服务器设置 添加测试用户,也可以从数据库查 添加api资源 ,api的key要和注册的client的api要匹配 授权码模式和mvc模式的时候 这两个模式先不管 //请求确认 可以自定义Claim .AddDeveloperSigningCredential() 生成token 需要的密钥和公钥 ......
授权服务器设置
添加用户
添加测试用户,也可以从数据库查
public static list<testuser> gettestuser() { return new list<testuser>() { new testuser(){ subjectid = "1", username ="zps", password = "zps", claims = new list<claim>(){ new claim("role","zps"), new claim("aaa","asdasdsd"), } }, new testuser(){ subjectid = "2", username ="admin", password = "admin", claims = new list<claim>(){ new claim("role","admin") } } }; }
添加api资源
添加api资源 ,api的key要和注册的client的api要匹配
public static ienumerable<apiresource> getresource() { return new list<apiresource>(){ new apiresource("api","my api") }; }
添加客户端
- 客户端模式
- 密码模式
- 授权码模式
- 混合模式
授权码模式和mvc模式的时候 这两个模式先不管
//请求确认
requireconsent = false, 这个属性要注意 如果是true 会先跳转到确认页面 然后再跳转到redirecturis
public static ienumerable<client> getclients() { return new list<client>(){ new client(){ clientid="client", //客户端模式 allowedgranttypes=granttypes.clientcredentials, clientsecrets={new secret("secret".sha256())}, allowedscopes={"api"} }, new client(){ clientid="pwdclient", //oauth密码模式 allowedgranttypes=granttypes.resourceownerpassword, clientsecrets={new secret("secret".sha256())}, allowedscopes={"api"} }, new client { clientid = "mvc", clientname = "mvc client", allowedgranttypes = granttypes.hybrid, clientsecrets = { new secret("secret".sha256()) }, // where to redirect to after login redirecturis = { "http://localhost:5001/signin-oidc" }, requireconsent = false, allowofflineaccess = true, // where to redirect to after logout postlogoutredirecturis = { "http://localhost:5001/signout-callback-oidc" }, allowedscopes = new list<string> { identityserverconstants.standardscopes.openid, identityserverconstants.standardscopes.profile, } }, new client { clientid = "js", clientname = "javascript client", allowedgranttypes = granttypes.code, requirepkce = true, requireclientsecret = false, redirecturis = { "http://localhost:5003/callback.html" }, postlogoutredirecturis = { "http://localhost:5003/index.html" }, allowedcorsorigins = { "http://localhost:5003" }, requireconsent = false, allowedscopes = { identityserverconstants.standardscopes.openid, identityserverconstants.standardscopes.profile, "api" } } }; }
添加identityserver 保护的资源
可以自定义claim
public static ienumerable<identityresource> getidentityresources() { return new identityresource[] { new identityresources.openid(), new identityresources.profile(), }; }
把identityserver注入到容器
.adddevelopersigningcredential() 生成token 需要的密钥和公钥 正式环境需要换成正经的
o.userinteraction.loginurl = "/auth/login";
o.userinteraction.logouturl = "/auth/logout";
o.userinteraction.errorurl = "/auth/error";
这三个是混合模式需要的 登录的地址 登出的地址 授权失败的地址
services.addidentityserver(o => { o.userinteraction.loginurl = "/auth/login"; o.userinteraction.logouturl = "/auth/logout"; o.userinteraction.errorurl = "/auth/error"; }) .addinmemoryidentityresources(config.getidentityresources()) .adddevelopersigningcredential() .addinmemoryclients(config.getclients()) .addinmemoryapiresources(config.getresource()) .addtestusers(config.gettestuser());
configure把中间件加到netcore中
app.useidentityserver();
postman测试
- grant-type:密码模式对应 password
- username 用户名
- password 密码
- client_id 客户端id 对应 授权服务clientid
- client_secret 客户端secret
推荐阅读
-
asp.net core IdentityServer4 实现 resource owner password credentials(密码凭证)
-
IdentityServer4 使用用户名和密码保护API访问
-
docker-compose一键部署redis一主二从三哨兵模式(含密码,数据持久化)
-
CentOS6.8单用户模式如何修改密码
-
Nginx服务器中为网站或目录添加认证密码的配置详解
-
ASP.NET Core身份认证服务框架IdentityServer4 介绍
-
python连接mongodb密码认证实例
-
Oracle11g密码延迟认证导致librarycachelock的情况分析
-
移动认证闪耀2018年中国互联网大会,登录1800余款APP不再需要密码了
-
Linux忘记root密码,进入单用户模式,切换运行级别,切换用户