如何在 Keycloak 中执行电子邮件操作

2023-11-27

我尝试使用 Keycloak API 触发发送电子邮件,但没有成功。正如文档中首先描述的,我正在为我的管理员用户获取令牌:

 curl \
  -d "client_id=admin-cli" \
  -d "username=admin" \
  -d "password=admin" \
  -d "grant_type=password" \
  "http://localhost:8180/auth/realms/master/protocol/openid-connect/token"

我成功获得了一个令牌,然后在第二次调用中使用该令牌,如下所示:

curl -v  -X PUT -d '["UPDATE_PASSWORD"]' \
    -H "Content-Type: application/json" \
    -H "Authorization: bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJqZEpWUW1QdEdsT3Azd0xYV2tWWVJ2ZzJXNkRubVBPSHNGQ0t5WGQ5RkVZIn0.eyJqdGkiOiIxYTI5YmJjYi04NWQ1LTRmOWQtYWRiOC0zYzA1OTZmNjJmNGMiLCJleHAiOjE1NTE5NTM5MzUsIm5iZiI6MCwiaWF0IjoxNTUxOTUzODc1LCJpc3MiOiJodHRwOi8vbG9jYWxob3N0OjgxODAvYXV0aC9yZWFsbXMvbWFzdGVyIiwiYXVkIjoiYWRtaW4tY2xpIiwic3ViIjoiNDY2YTQwMDQtNDBmNy00NWZiLTk3ZTItODg2Mzg0NGVlOWU3IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiYWRtaW4tY2xpIiwiYXV0aF90aW1lIjowLCJzZXNzaW9uX3N0YXRlIjoiM2Q0MDZmYTEtZGJhYy00NjEwLWJiMmQtMjNiYjAyNDgxNTU2IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6W10sInJlc291cmNlX2FjY2VzcyI6e30sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwibmFtZSI6IkdvaGFyIEdhc3BhcnlhbiIsInByZWZlcnJlZF91c2VybmFtZSI6ImFkbWluIiwiZ2l2ZW5fbmFtZSI6IkdvaGFyIiwiZmFtaWx5X25hbWUiOiJHYXNwYXJ5YW4iLCJlbWFpbCI6ImdvaGFyLmdhc3BhcnlhbkBsZXZlcnRvbi5haSJ9.qJJ1jMs4p8V2CbtKsaVyUhWwiQur7hAwyYi14RGx5T0on6EelRNlFtduGu0XOBeB2gZ8VwuVYgmb8SGXupvJs2LfqhXMnZIy0E7y4QX0ZJQ_YH8dzAZTU6x9cJlSmFY3tTts1CF7-ySDI-ZiaKST7eVT-lkxb5fNBj2_C-6-wwOtxmctSCrQZcdKzGxf0iAYTieaGgNTJf_e6FTusvHLzFyUCAjHszV5Gw-gkzlM7R3uE9wWxjPZgkFz5zGxgKrnijZn45r0CIDQb7kKxCalBvYb-saNscpelzyHqyEd1her90UoHcLyE0JexF37Qqz040JxeJt0I1nOOADAjO8X2Q" \
    "http://localhost:8180/auth/admin/realms/local/users/4553/execute-actions-email"

我得到的答案是 404。

我认为问题是我正在使用用户联合中的用户和数据库中的 id。如果我在 keycloak 中创建用户并使用 keycloak 生成的 id 它将起作用。问题是我需要为联合用户提供此功能。 有什么提示吗?


As of 2022. Keycloak 19.02 the Documentation States:

这实际上是错误的。正确的 api 端点是 gohar.gasparyan 提到的端点

编辑:事实上我没有读,因为文档在顶部说明

UserQueryProvider 可以在组中找到

我有一个属于该组的用户,使用用户名/密码登录(我无法弄清楚设置访问令牌),然后使用不记名令牌使用 API 端点。

完整脚本如下:

#!/bin/bash

KEYCLOAK_URL=http://localhost:8080/auth
KEYCLOAK_REALM=myRealmName
KEYCLOAK_CLIENT_ID=serviceAccount
KEYCLOAK_CLIENT_SECRET=serviceAccountPassword
REDIRECT_URL=http://redirect-link-after-action.com
# Realm -> Manage -> Clients -> ClientID of connected application
CLIENT_ID=ConnectApplicationClientID

set -x

export TKN=$(curl -X POST "${KEYCLOAK_URL}/realms/${KEYCLOAK_REALM}/protocol/openid-connect/token" \
 -H "Content-Type: application/x-www-form-urlencoded" \
 -d "username=${KEYCLOAK_CLIENT_ID}" \
 -d "password=${KEYCLOAK_CLIENT_SECRET}" \
 -d 'grant_type=password' \
 -d 'client_id=admin-cli' | jq -r '.access_token')

#curl -X GET "${KEYCLOAK_URL}/admin/realms/${KEYCLOAK_REALM}/users/${USER_ID}" \
RAW=$(curl -X GET "${KEYCLOAK_URL}/admin/realms/${KEYCLOAK_REALM}/users" \
-H "Accept: application/json" \
-H "Authorization: Bearer $TKN" | jq .)

eval "$( echo $RAW | jq -r '@sh "values=( \([.[].id]) )"' )"

REDIRECT_URI_ENCODED=$(printf %s $REDIRECT_URL | jq -sRr @uri)


for i in "${values[@]}"; do
  curl -v -X PUT "${KEYCLOAK_URL}/admin/realms/${KEYCLOAK_REALM}/users/${i}/execute-actions-email?redirect_uri=${REDIRECT_URI_ENCODED}&client_id=${CLIENT_ID}" -H "Content-Type: application/json" -H "Authorization: Bearer $TKN" -d '["UPDATE_PASSWORD"]'
done

确保将redirect_uri添加到客户端配置中的有效重定向url中

经过所有这些努力,我们以“返回应用程序”的漂亮链接结束

请注意,除非您在领域 -> 配置 -> 领域设置中指定前端 URL,否则您的电子邮件帐户更新链接将引用 KEYCLOAK_URL 变量

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Keycloak 中执行电子邮件操作 的相关文章

随机推荐

  • sqlite3“操作错误:接近”(“:语法错误”python

    简而言之 我正在尝试创建一个 sql 数据库表并向其中输入数据 我让它以更简单的方式工作 但是当我将它放入我的脚本中时 它会导致此错误 我希望这是我错过的一些简单的事情 任何帮助 建议将不胜感激 conn sqlite3 connect D
  • Angularjs - 装饰控制器

    我正在尝试为我的控制器设置一个装饰器 我的目的是在我的应用程序中的所有控制器中引入一些常见的行为 我已将其配置为在 Angular 1 2 x 中工作 但从 1 3 x 开始有一些重大更改破坏了代码 现在得到的错误是 控制器不是一个函数 下
  • 类型参数“T”不受 impl 特征、自身类型或谓词的约束

    当特征具有相关类型时 我很难理解特征的使用 这是一个非常简单的例子 pub trait Message pub trait SendsMessages type Message Message fn send msg Self Messag
  • 如何在 Moose 中使用单个构建器构建多个属性?

    使用 Moose 是否可以创建一个同时构建多个属性的构建器 我有一个项目 其中对象有多个字段 集 如果请求该集中的任何成员 我想继续填充它们 我的假设是 如果我需要姓名 我还需要生日 并且由于它们位于同一个表中 因此在一个查询中获取两者会更
  • 基类指针可以指向派生类对象。为什么反之则不然呢?

    基类指针可以指向派生类对象 为什么不进行强制转换则反之亦然 从逻辑上讲 基类不会有足够的派生类信息 但派生类也应该有基类的信息 我在这里缺少一些基础知识 如果我告诉你我有一只狗 你就可以放心地假设我有一只宠物 如果我告诉你我有一只宠物 你不
  • Sql批量插入--文件不存在

    我有以下查询要插入表中 BULK INSERT tblMain FROM c Type txt WITH FIELDTERMINATOR ROWTERMINATOR n GO 它收到消息 消息 4860 16 级 状态 1 第 1 行无法批
  • 在运行时动态选择要使用的 .dll 版本

    我正在开发一个 SharePoint 实用程序 该应用程序适用于 SharePoint 2007 和 2010 当我引用 12 0 0 0 版本的 SharePoint dll 时 该应用程序适用于 SharePoint 2007 但不适用
  • TFS 2012 + Visual studio 2012:某些设置选项返回“用户名或密码不正确”

    我已将 TFS 2010 升级到 TFS 2012 没有出现任何问题 我可以连接到源代码管理 签入以及工作所需的一切 但是 如果我转到我所连接的团队项目的设置页面 则会出现以下选项work正如预期 团队项目 源代码控制 团队项目 门 户设置
  • 如何从列表中删除元素?

    我有一个列表 我想从中删除一个元素 我怎样才能做到这一点 我尝试在参考手册中查找我认为该函数的明显名称 但没有找到合适的名称 Answer recommended by R Language Collective 如果您不想就地修改列表 例
  • 使用 Chromedriver 制作程序,出现错误:“无法使用此命令获取 Chrome 版本”

    这是我的代码 我这样做是因为当我尝试输入 chromedriver exe 的路径时 我要么收到 WebDriverException 消息 chromedriver exe 可执行文件可能有错误的权限 或 WebDriverExcepti
  • MVVM Light Toolkit - Messenger 使用事件聚合器还是中介器模式?

    有人可以帮我看看是否I Messenger 类 和实现 from MVVM轻工具包演示了使用事件聚合器模式 or 中介者模式 如果有人建议它部分遵循这两种模式 那么我会请求详细信息 说明实现的哪一部分类似于哪种模式以保持答案有效 Ref O
  • RoR - 选择禁用 include_blank 的标签

    我想要这样的结果
  • 从 fstream 读取单个字符?

    我正在尝试从 stdio 迁移到 iostream 事实证明这非常困难 我已经掌握了加载文件和关闭文件的基础知识 但我真的不知道流是什么 或者它们如何工作 与此相比 在工作室中一切都相对简单和直接 我需要做的是 从文本文件中读取单个字符 根
  • 如何创建一个可以切换tab内容的表格?

    I want to make a table looks like this 内部表格不是问题 但不知道如何创建外部框架 其中包括 商品描述 运输 和 退货 选项卡 一个最小的例子将不胜感激 谢谢 你当然可以使用 jQuery 来解决这个问
  • 在 sqlalchemy 中对相同的声明性基础使用不同的架构

    我对 Pyramid 和 SQLAlchemy 都很陌生 我正在使用 SQLAlchemy 开发 Python Pyramid 项目 我在下面设置了一个简单的模型 我将如何在运行时将其与不同的模式一起使用 这将是一个 PostgreSQL
  • 溢出:自动在触摸设备中不起作用(iOS)

    我已经使用 twitter bootstrap 实现了一个网站 在网站的顶部 我使用了一个导航栏 在其中使用了一个下拉菜单 下拉菜单由 和 标签组成 我正在显示该 dropdwon 菜单中的成员列表 当成员列表增长时 下拉菜单水平增长 为此
  • 为什么ARM gcc在函数开始时将寄存器r3和lr压入堆栈? [复制]

    这个问题在这里已经有答案了 我尝试编写一个像这样的简单测试代码 main c main c void test void main test 然后我使用arm non eabi gcc进行编译并使用objdump来获取汇编代码 arm no
  • 在jBoss AS中创建模块

    我使用 jBoss AS 7 来发布我的各种项目 并且所有项目都使用 Jersey API 因此我不想将其部署在每个项目中 而是想为其创建一个模块 为此 我创建了文件夹 JBOSS HOME modules com sun Jersey m
  • ObjectListView - 通过单击具有固定内容/文本的指定列来删除行

    我有一个简单的问题 我自己无法解决 我有一个 ObjectListView 其中填充了我的一些对象 但除此之外 我想要另一列 其默认文本为 删除 单击该列后 应删除所选行 我怎么做 您可以通过使所需的行可编辑并使用 CellEditActi
  • 如何在 Keycloak 中执行电子邮件操作

    我尝试使用 Keycloak API 触发发送电子邮件 但没有成功 正如文档中首先描述的 我正在为我的管理员用户获取令牌 curl d client id admin cli d username admin d password admi