IdentityServer4 登录使用数据库
2023-02-18 15:32:19 时间
业务场景:
IdentityServer4 默认使用TestUser
和UserStore
,需要模拟和加载所有的用户数据,正式环境肯定不能这样实现,我们想从自己的数据库中读取用户信息,另外,因为 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<IProfileService, ProfileService>();
}
上面代码,会在await _interaction.GrantConsentAsync(request, grantedConsent);
执行的时候执行,用户登录直接访问数据库写在Login
中,就可以了。
如果授权模式为密码模式,需要去实现IResourceOwnerPasswordValidator
接口。
参考资料:
相关文章
- 无需新型token mixer就能SOTA:MetaFormer视觉基线模型开源,刷新ImageNet记录
- 推荐一款神仙颜值的Redis客户端工具
- 首个在ImageNet上精度超过80%的二值神经网络BNext问世,-1与+1的五年辛路历程
- Redis+Guava,性能炸裂!这组合真的太顶了....
- 【eureka问题:已解决】Request execution failed with message: java.net.ConnectException: Connection refused:
- 【已解决】Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon runnin
- 【已解决】springboot在使用redisTemplate的测试的时候报空指针
- 差两个像素让我很难受,这问题绝不允许留到明年!
- React DevUI 18.0 正式发布🎉
- 好慌,我代码没了!不会是变基变出问题了吧?
- 老板:你为什么要选择 Vue?
- 实用的 Bash 快捷键
- Quill基本使用和配置 - DevUI
- Quill富文本编辑器的实践 - DevUI
- 如何解决异步接口请求快慢不均导致的数据错误问题? - DevUI
- 让我们一起建设 Vue DevUI 项目吧!🥳
- 号外号外!DevUI Admin V1.0 发布啦!
- 手把手教你搭建自己的Angular组件库 - DevUI
- 2021 年最值得推荐的 7 个 Angular 前端组件库 - DevUI
- 立完flag,你可能需要对flag进行量化