博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IdentityServer4 登录使用数据库
阅读量:5166 次
发布时间:2019-06-13

本文共 1346 字,大约阅读时间需要 4 分钟。

业务场景:

IdentityServer4 默认使用TestUserUserStore,需要模拟和加载所有的用户数据,正式环境肯定不能这样实现,我们想从自己的数据库中读取用户信息,另外,因为 IdentityServer4 实现了 OpenId 协议,我们想在用户登录的时候,在请求中添加用户的一些额外信息,这样就不需要再去请求用户服务了。

具体实现:

using IdentityServer4.Models;using IdentityServer4.Services;using System.Linq;using System.Threading.Tasks;public class ProfileService : IProfileService{    public async Task GetProfileDataAsync(ProfileDataRequestContext context)    {        if (context.IssuedClaims.Count == 0)        {            if (context.Subject.Claims.Count() > 0)            {                context.IssuedClaims = context.Subject.Claims.ToList();            }        }    }    public async Task IsActiveAsync(IsActiveContext context)    { }}

Startup添加对应配置(注入服务接口):

public void ConfigureServices(IServiceCollection services){    var builder = services.AddIdentityServer();    builder.AddTemporarySigningCredential()            .AddInMemoryIdentityResources(Config.GetIdentityResources())            .AddInMemoryApiResources(Config.GetApiResources())            .AddInMemoryClients(Config.GetClients());    builder.Services.AddTransient
();}

上面代码,会在await _interaction.GrantConsentAsync(request, grantedConsent);执行的时候执行,用户登录直接访问数据库写在Login中,就可以了。

如果授权模式为密码模式,需要去实现IResourceOwnerPasswordValidator接口。

参考资料:

转载于:https://www.cnblogs.com/xishuai/p/identityserver4-login-with-database.html

你可能感兴趣的文章
虚拟机长时间不关造成的问题
查看>>
面试整理:Python基础
查看>>
Python核心编程——多线程threading和队列
查看>>
Program exited with code **** 相关解释
查看>>
植物大战僵尸中文年度版
查看>>
26、linux 几个C函数,nanosleep,lstat,unlink
查看>>
投标项目的脚本练习2
查看>>
201521123107 《Java程序设计》第9周学习总结
查看>>
Caroline--chochukmo
查看>>
iOS之文本属性Attributes的使用
查看>>
从.Net版本演变看String和StringBuilder性能之争
查看>>
Excel操作 Microsoft.Office.Interop.Excel.dll的使用
查看>>
解决Ubuntu下博通网卡驱动问题
查看>>
【bzoj2788】Festival
查看>>
执行gem install dryrun错误
查看>>
HTML5简单入门系列(四)
查看>>
实现字符串反转
查看>>
转载:《TypeScript 中文入门教程》 5、命名空间和模块
查看>>
苹果开发中常用英语单词
查看>>
[USACO 1.4.3]等差数列
查看>>