当前位置: 首页 > article >正文

终极指南:如何为Ory Hydra开发OpenID Connect自定义用户信息端点

终极指南如何为Ory Hydra开发OpenID Connect自定义用户信息端点【免费下载链接】hydraInternet-scale OpenID Certified™ OpenID Connect and OAuth2.1 provider that integrates with your user management through headless APIs. Solve OIDC/OAuth2 user cases over night. Consume as a service on Ory Network or self-host. Trusted by OpenAI and many others for scale and security. Written in Go.项目地址: https://gitcode.com/gh_mirrors/hydra2/hydraOry Hydra是一个高性能的OpenID Connect和OAuth2.1认证服务能够通过无头API与用户管理系统集成帮助开发者快速解决身份验证需求。本文将详细介绍如何为Ory Hydra开发自定义用户信息端点让你轻松扩展用户数据返回功能。OpenID Connect用户信息端点基础用户信息端点是OpenID Connect流程中的关键组件用于向客户端提供经过身份验证的用户信息。Ory Hydra默认提供了标准的用户信息端点但在实际应用中你可能需要根据业务需求自定义返回的用户数据。Ory Hydra的用户信息结构定义在internal/httpclient/model_oidc_user_info.go文件中包含了标准的OpenID Connect用户声明如sub用户唯一标识符name用户全名email用户电子邮箱picture用户头像URL以及生日、性别、时区等其他可选声明用户信息端点工作流程用户信息端点的工作流程如下客户端使用访问令牌向/userinfo端点发起请求Hydra验证访问令牌的有效性Hydra调用用户信息提供器获取用户数据Hydra将用户数据格式化为JSON并返回给客户端图OpenID Connect认证流程中包含用户信息的响应结果开发自定义用户信息提供器要自定义用户信息端点你需要实现Ory Hydra的用户信息提供器接口。以下是详细步骤步骤1创建用户信息提供器实现创建一个新的Go文件实现UserInfoProvider接口。该接口通常定义在Ory Hydra的Fosite库中你需要实现GetUserInfo方法type CustomUserInfoProvider struct { // 可以包含数据库连接或其他依赖 userService UserService } func (p *CustomUserInfoProvider) GetUserInfo(ctx context.Context, requester fosite.Requester) (interface{}, error) { // 从requester中获取用户ID userID : requester.GetSubject() // 从自定义用户服务获取用户数据 user, err : p.userService.GetUserByID(ctx, userID) if err ! nil { return nil, err } // 构建自定义用户信息 return OidcUserInfo{ Sub: user.ID, Name: user.FullName, GivenName: user.FirstName, FamilyName: user.LastName, Email: user.Email, EmailVerified: user.EmailVerified, // 添加自定义字段 PreferredUsername: user.Username, // 可以添加更多自定义声明 }, nil }步骤2注册用户信息提供器在Hydra的初始化代码中你需要将自定义用户信息提供器注册到Hydra的配置中。这通常在主程序入口或配置设置处完成// 创建自定义用户信息提供器实例 userInfoProvider : CustomUserInfoProvider{ userService: NewUserService(db), } // 将提供器注册到Hydra hydraConfig.UserInfoProvider userInfoProvider步骤3配置用户信息端点确保Hydra的配置文件中启用了用户信息端点。在Hydra的配置文件如config.yaml中检查以下设置serve: public: enabled: true endpoints: userinfo: enabled: true测试自定义用户信息端点开发完成后你需要测试自定义用户信息端点是否正常工作。以下是测试步骤获取访问令牌首先使用OAuth2流程获取一个有效的访问令牌。你可以使用Hydra的CLI工具或编写测试代码来获取令牌# 使用Hydra CLI获取访问令牌 hydra token client --client-id your-client-id --client-secret your-client-secret --scope openid email profile调用用户信息端点使用获取到的访问令牌调用用户信息端点curl -H Authorization: Bearer your-access-token https://hydra.example.com/userinfo你应该收到包含自定义字段的用户信息响应{ sub: 123456, name: John Doe, given_name: John, family_name: Doe, email: john.doeexample.com, email_verified: true, preferred_username: johndoe }高级自定义选项添加自定义声明除了标准声明外你还可以添加自定义声明。在Ory Hydra中自定义声明通常以命名空间为前缀例如// 在用户信息中添加自定义声明 customClaims : map[string]interface{}{ https://example.com/claims/role: admin, https://example.com/claims/department: engineering, } // 将自定义声明添加到用户信息中 userInfo : OidcUserInfo{ // 标准声明... // 添加自定义声明 https://example.com/claims/role: admin, https://example.com/claims/department: engineering, }基于作用域的条件返回你可以根据访问令牌中的作用域条件性地返回用户信息func (p *CustomUserInfoProvider) GetUserInfo(ctx context.Context, requester fosite.Requester) (interface{}, error) { userID : requester.GetSubject() user, err : p.userService.GetUserByID(ctx, userID) if err ! nil { return nil, err } userInfo : OidcUserInfo{ Sub: user.ID, Name: user.FullName, // 基本信息... } // 如果请求了email作用域返回邮箱信息 if requester.GetScopes().Has(email) { userInfo.Email user.Email userInfo.EmailVerified user.EmailVerified } // 如果请求了custom:role作用域返回角色信息 if requester.GetScopes().Has(custom:role) { userInfo.Extensions map[string]interface{}{ https://example.com/claims/role: user.Role, } } return userInfo, nil }常见问题解决自定义字段不显示如果自定义字段没有出现在用户信息响应中检查以下几点确保自定义字段在OidcUserInfo结构体中正确定义检查是否正确实现了GetUserInfo方法验证Hydra是否正确注册了自定义用户信息提供器性能优化对于高流量场景建议对用户信息查询进行缓存func (p *CustomUserInfoProvider) GetUserInfo(ctx context.Context, requester fosite.Requester) (interface{}, error) { userID : requester.GetSubject() // 尝试从缓存获取 cachedUserInfo, found : p.cache.Get(userID) if found { return cachedUserInfo, nil } // 缓存未命中从数据库获取 user, err : p.userService.GetUserByID(ctx, userID) if err ! nil { return nil, err } userInfo : buildUserInfo(user) // 存入缓存设置过期时间 p.cache.Set(userID, userInfo, time.Minute*5) return userInfo, nil }总结通过实现自定义用户信息提供器你可以轻松扩展Ory Hydra的用户信息端点功能满足特定的业务需求。本文介绍了开发自定义用户信息端点的完整流程包括实现用户信息提供器、注册提供器、配置端点和测试验证。同时还提供了添加自定义声明、基于作用域返回信息和性能优化等高级技巧。要深入了解Ory Hydra的更多功能请参考官方文档和源代码。开始使用Ory Hydra为你的应用提供安全、灵活的身份验证解决方案吧提示要开始使用Ory Hydra你可以通过以下命令克隆仓库git clone https://gitcode.com/gh_mirrors/hydra2/hydra【免费下载链接】hydraInternet-scale OpenID Certified™ OpenID Connect and OAuth2.1 provider that integrates with your user management through headless APIs. Solve OIDC/OAuth2 user cases over night. Consume as a service on Ory Network or self-host. Trusted by OpenAI and many others for scale and security. Written in Go.项目地址: https://gitcode.com/gh_mirrors/hydra2/hydra创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关文章:

终极指南:如何为Ory Hydra开发OpenID Connect自定义用户信息端点

终极指南:如何为Ory Hydra开发OpenID Connect自定义用户信息端点 【免费下载链接】hydra Internet-scale OpenID Certified™ OpenID Connect and OAuth2.1 provider that integrates with your user management through headless APIs. Solve OIDC/OAuth2 user cas…...

Symfony Polyfill Intl Normalizer源码深度解析:从算法实现到性能优化

Symfony Polyfill Intl Normalizer源码深度解析:从算法实现到性能优化 【免费下载链接】polyfill-intl-normalizer Symfony polyfill for intls Normalizer class and related functions 项目地址: https://gitcode.com/gh_mirrors/po/polyfill-intl-normalizer …...

保姆级教程:在Ubuntu 20.04上从零跑通VINS_Fusion(含EuRoc/KITTI数据集避坑指南)

从零构建VINS_Fusion实战指南:Ubuntu 20.04环境下的多传感器融合全流程解析 当第一次接触VINS_Fusion时,许多开发者会被其强大的多传感器融合能力所吸引,却又在环境配置和数据集处理环节频频碰壁。作为港科大开源的SLAM算法代表,V…...

LLM社交智能代理的心智理论与工程实践

1. 社交智能LLM代理的现状与挑战当前基于大语言模型(LLM)的智能代理在社交场景中表现出明显的机械性缺陷。这些系统虽然能够生成语法正确的响应,但在理解对话背后的社交意图、情感状态和隐含规则方面仍显不足。典型的失败案例包括&#xff1a…...

LittleBigMouse终极指南:彻底解决Windows多显示器鼠标移动不连贯问题

LittleBigMouse终极指南:彻底解决Windows多显示器鼠标移动不连贯问题 【免费下载链接】LittleBigMouse DPI Aware mouse move across screens 项目地址: https://gitcode.com/gh_mirrors/li/LittleBigMouse 你是否在使用4K和1080p显示器混搭时,经…...

运维视角下的PHP命令执行防护:除了过滤空格,我们还能做什么?

运维视角下的PHP命令执行防护:构建纵深防御体系 在Web应用安全领域,PHP命令执行漏洞(RCE)始终是攻击者最青睐的攻击向量之一。作为运维团队和安全工程师,我们常常陷入"打地鼠"式的防御困境——每当修复一种绕…...

别再手动写表单了!用这个Vue3+TS+Element Plus的TQueryCondition组件,5分钟搞定后台管理筛选页

Vue3TSElement Plus高效封装:TQueryCondition组件深度实战指南 后台管理系统开发中,最枯燥的重复劳动莫过于编写各种筛选表单。每次新增一个列表页,就要重写一遍日期范围选择、下拉筛选、输入框联动这些基础功能。这种低效模式正在被新一代组…...

深入FreeModbus RTU协议栈:从源码到中断状态机,搞懂移植的底层逻辑

深入FreeModbus RTU协议栈:从源码到中断状态机,搞懂移植的底层逻辑 Modbus协议作为工业自动化领域的通用语言,其轻量级实现FreeModbus在嵌入式系统中广泛应用。但大多数开发者仅停留在"能用"层面,对协议栈内部的状态机流…...

10分钟搞定:Mac飞秋极简安装配置指南

10分钟搞定:Mac飞秋极简安装配置指南 【免费下载链接】feiq 基于qt实现的mac版飞秋,遵循飞秋协议(飞鸽扩展协议),支持多项飞秋特有功能 项目地址: https://gitcode.com/gh_mirrors/fe/feiq 还在为Mac上找不到好用的局域网通讯工具而烦…...

如何为Symfony Polyfill Intl Normalizer编写单元测试

如何为Symfony Polyfill Intl Normalizer编写单元测试 【免费下载链接】polyfill-intl-normalizer Symfony polyfill for intls Normalizer class and related functions 项目地址: https://gitcode.com/gh_mirrors/po/polyfill-intl-normalizer Symfony Polyfill Intl …...

AcFunDown:免费开源的A站视频批量下载终极解决方案

AcFunDown:免费开源的A站视频批量下载终极解决方案 【免费下载链接】AcFunDown 包含PC端UI界面的A站 视频下载器。支持收藏夹、UP主视频批量下载 😳仅供交流学习使用喔 项目地址: https://gitcode.com/gh_mirrors/ac/AcFunDown 还在为无法保存喜欢…...

RPG Maker终极插件指南:如何用100+免费插件打造专业级游戏体验

RPG Maker终极插件指南:如何用100免费插件打造专业级游戏体验 【免费下载链接】RPGMakerMV RPGツクールMV、MZで動作するプラグインです。 项目地址: https://gitcode.com/gh_mirrors/rp/RPGMakerMV 你是否曾经为RPG Maker的功能限制感到沮丧?想要…...

LinkSwift网盘直链下载助手:一键获取八大网盘下载链接的终极指南

LinkSwift网盘直链下载助手:一键获取八大网盘下载链接的终极指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云…...

AntiMicroX:免费开源的游戏手柄键盘映射终极指南 [特殊字符]✨

AntiMicroX:免费开源的游戏手柄键盘映射终极指南 🎮✨ 【免费下载链接】antimicrox Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. 项目地址: https://gitcod…...

在数字阅读的喧嚣中,你是否渴望一片宁静的阅读空间?

在数字阅读的喧嚣中,你是否渴望一片宁静的阅读空间? 【免费下载链接】read-cat 一款免费、开源、简洁、纯净、无广告的小说阅读器 项目地址: https://gitcode.com/gh_mirrors/re/read-cat 在这个信息爆炸的时代,我们每天都在与各种弹窗…...

Linux系统监控终极指南:5分钟掌握top/htop/free/vmstat实用技巧

Linux系统监控终极指南:5分钟掌握top/htop/free/vmstat实用技巧 【免费下载链接】test-your-sysadmin-skills A collection of Linux Sysadmin Test Questions and Answers. Test your knowledge and skills in different fields with these Q/A. 项目地址: https…...

Swagger2Word:终结API文档维护噩梦的智能转换方案

Swagger2Word:终结API文档维护噩梦的智能转换方案 【免费下载链接】swagger2word 项目地址: https://gitcode.com/gh_mirrors/swa/swagger2word 一、API文档管理的行业痛点:从混乱到标准化 在微服务架构盛行的今天,每个技术团队都面…...

5个Maccy高效技巧:让剪贴板成为你的第二大脑

5个Maccy高效技巧:让剪贴板成为你的第二大脑 【免费下载链接】Maccy Lightweight clipboard manager for macOS 项目地址: https://gitcode.com/gh_mirrors/ma/Maccy 你是否曾经在多个应用间来回切换,只为找回刚刚复制过的内容?或者在…...

手机制作USB启动盘终极指南:告别电脑依赖的简单方法

手机制作USB启动盘终极指南:告别电脑依赖的简单方法 【免费下载链接】EtchDroid An application to write OS images to USB drives, on Android, no root required. 项目地址: https://gitcode.com/gh_mirrors/et/EtchDroid 你是否曾经遇到过电脑突然崩溃&a…...

如何通过Aider AI编程助手实现开发效率的质变提升?

如何通过Aider AI编程助手实现开发效率的质变提升? 【免费下载链接】aider aider is AI pair programming in your terminal 项目地址: https://gitcode.com/GitHub_Trending/ai/aider 你是否经历过这样的场景:深夜调试代码,反复修改却…...

智能视频转换终极指南:解锁B站缓存视频的完整解决方案

智能视频转换终极指南:解锁B站缓存视频的完整解决方案 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾面对满屏的m4s缓存文件…...

TwelveMonkeys ImageIO元数据处理完全教程:从入门到精通的终极指南

TwelveMonkeys ImageIO元数据处理完全教程:从入门到精通的终极指南 【免费下载链接】TwelveMonkeys TwelveMonkeys ImageIO: Additional plug-ins and extensions for Javas ImageIO 项目地址: https://gitcode.com/gh_mirrors/tw/TwelveMonkeys TwelveMonke…...

为Claude Code配置自定义模型服务,连接Taotoken聚合端点的详细步骤

为Claude Code配置自定义模型服务,连接Taotoken聚合端点的详细步骤 1. 准备工作 在开始配置之前,请确保您已经拥有一个有效的Taotoken账户,并在控制台中创建了API Key。同时,您需要在模型广场查看并记录下您希望使用的模型ID。这…...

如何免费获取B站大会员4K视频:终极下载工具完全指南

如何免费获取B站大会员4K视频:终极下载工具完全指南 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 还在为B站大会员专属的…...

OBS虚拟摄像头集成方案:多平台视频流适配实现路径

OBS虚拟摄像头集成方案:多平台视频流适配实现路径 【免费下载链接】obs-virtual-cam 项目地址: https://gitcode.com/gh_mirrors/obs/obs-virtual-cam OBS-VirtualCam作为OBS Studio的核心插件,通过DirectShow设备虚拟化技术实现了视频流的多端转…...

突破性3D文件可视化解决方案:stl-thumb深度解析与性能优化实践

突破性3D文件可视化解决方案:stl-thumb深度解析与性能优化实践 【免费下载链接】stl-thumb Thumbnail generator for STL files 项目地址: https://gitcode.com/gh_mirrors/st/stl-thumb 在3D打印和数字制造领域,STL文件作为标准的三维模型格式&a…...

3分钟掌握输入法词库转换:深蓝词库转换工具完全指南

3分钟掌握输入法词库转换:深蓝词库转换工具完全指南 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 你是否曾在更换电脑或输入法时,为无法迁移…...

5分钟掌握PKHeX自动合法性插件:告别宝可梦数据合规烦恼

5分钟掌握PKHeX自动合法性插件:告别宝可梦数据合规烦恼 【免费下载链接】PKHeX-Plugins Plugins for PKHeX 项目地址: https://gitcode.com/gh_mirrors/pk/PKHeX-Plugins 还在为宝可梦数据合法性验证而头疼吗?PKHeX自动合法性插件(Aut…...

iPhone USB网络共享驱动终极解决方案:快速解决Windows连接问题

iPhone USB网络共享驱动终极解决方案:快速解决Windows连接问题 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.co…...

MCP 2026集成失败率TOP3原因曝光:92%的故障源于模型序列化协议错配(附v2.1.8补丁检测脚本)

更多请点击: https://intelliparadigm.com 第一章:MCP 2026 AI 推理引擎集成概览 MCP 2026 是新一代面向边缘与云协同场景的轻量级 AI 推理引擎,专为低延迟、高吞吐、多模态模型(如视觉-语言联合推理)设计。其核心采用…...