天道酬勤,学无止境

How can I configure Keycloak to use HMAC algorithm as default instead of RSA?

I have created a new realm in Keycloak and in the admin tab Keys -> Active I can see three entries: RSA, HMAC, AES.

Whenever a JWT token is generated the signature algorithm used is RSA. How can I use HMAC instead?

评论

I had the same question and found the following answers:

The latest documentation says that only rsa is supported for access tokens. (http://www.keycloak.org/docs/3.3/server_admin/topics/realms/keys.html)

There is the plan to sign refresh tokens with hmac. Look at this user mailing list entry for more details: "It is not great to sign accessTokens and idTokens by HMAC anyway since the applications will need to have access to realm signing key. As it is symmetric stuff. This can be security hole as then the application can generate and sign tokens by itself. Hence we rather rely on the asymetric cryptography - Keycloak signs tokens with private key and application has just public key to verify signatures." http://lists.jboss.org/pipermail/keycloak-user/2017-May/010809.html

Here is the JIRA for it: https://issues.jboss.org/browse/KEYCLOAK-4623 and internally https://issues.jboss.org/browse/KEYCLOAK-4622

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • id_rsa.pub 文件 SSH 错误:格式无效(id_rsa.pub file SSH Error: invalid format)
    问题 我和我的同事一直试图让我的 macbook ssh 进入我们的 AWS 生产服务器,但没有成功,几个月前这确实有效,但是当我们昨天去做时 - 我们不断收到以下错误消息。 (我在以下所有部分都用占位符替换了我的用户名和主机名) $ ssh titan-data Load key "/Users/aronlilland/.ssh/id_rsa.pub": invalid format user@my_ip_address: Permission denied (publickey). 相关配置文件数据 <!-- config file --> Host titan-data HostName my_ip_address User user IdentityFile ~/.ssh/id_rsa.pub AddKeysToAgent yes 我已经完成了可以想象的每一步让它再次工作,这些是我按顺序完成的以下步骤: 步骤 1) 确保 .pub 文件已添加到服务器上 这一步重复了几次,在整个消除过程中,我重新生成了 .pub 文件 4 次。 错误似乎是本地的,而不是来自服务器的错误,如果我错了,有人需要纠正我。 步骤 2) 检查以下文件夹和文件是否具有正确的权限 drwx------ 6 aronlilland staff 192B Jan 18 09:41 .ssh/ drwx----
  • 没有找到孩子的公钥,Keycloak?(Didn't find publicKey for kid ,Keycloak?)
    问题 在从 angular js 2 调用端点到 widlfly 服务器时,我收到了这个异常“没有找到孩子的公钥”。 身份验证发生在 keycloak 中,但是我正在使用相同的令牌从同一领域内的不同客户端(不同的微服务)调用大约 8 个端点,但我仅针对此微服务调用收到此异常。 我确信用户拥有所有客户的所有角色。 我还在 JWT 上解码了令牌以验证这一点。 有时有效,有时无效!! 这是异常堆栈跟踪: Caused by: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty at sun.security.validator.PKIXValidator.<init>(PKIXValidator.java:90) at sun.security.validator.Validator.getInstance(Validator.java:179) at sun.security.ssl.X509TrustManagerImpl.getValidator(X509TrustManagerImpl.java:312) at sun.security.ssl
  • Keycloak + Kerberos authentication: Mechanism level: Invalid argument (400) - Cannot find key of appropriate type to decrypt AP REP - RC4 with HMAC
    I have the following spring web application on JBoss EAP 7.2.2 - Machine CentOs Keycloak 3.3.4 on CentOs Active directory We run on OpenJDK 8 Users login from Windows machines using their Active directory accounts. Keycloak is configured with a kerberos use federation. On CentOs machines a kerberos client is installed using yum install krb5-user krb5-doc yum install krb5-pkinit krb5-workstation yum install krb5-libs krb5-devel yum install krb5-server krb5-workstation pam_krb5 In keycloak user federation, the keytab file path an other configrations are correct. This is confirmed by the keycloak
  • Java 1.7 + JSCH:java.security.InvalidKeyException:此算法的密钥太长(Java 1.7 + JSCH: java.security.InvalidKeyException: Key is too long for this algorithm)
    问题 我正在尝试使用 JSCH 将文件上传到远程 SFTP 共享。 每次我尝试从我的代码中连接到共享时,我都会收到如下所示的异常: com.jcraft.jsch.JSchException: Session.connect: java.security.InvalidKeyException: Key is too long for this algorithm at com.jcraft.jsch.Session.connect(Session.java:558) ~[jsch-0.1.51.jar:na] at com.jcraft.jsch.Session.connect(Session.java:183) ~[jsch-0.1.51.jar:na] 我看过一些帖子描述了升级到 Java 8 时出现的这个错误,但我们仍在使用 Java 7,而且我对 Java 的加密支持知之甚少,无法知道这是否重要。 有人建议安装JCE(Java Cryptography Extensions)来解决这个问题,所以我试了一下,但是在将相应的jar文件复制到/libs/security目录并重新启动应用程序后,仍然出现相同的错误。 我们通过执行此脚本确认安装了 JCE,并注意到没有抛出异常。 我还尝试在详细模式下使用sftp命令从终端连接到远程 SFTP 共享。 这是我得到的: OpenSSH
  • KeyProperties秘钥属性的理解(注释的英文直接翻译)
    在创建密码器的时候,需要传入需要的参数TRANSFORMATION,而这个参数需要通过其他参数的拼接才可以使用,比如: //cipher [ˈsaɪfə(r)] n. 密码;暗号; Cipher createCipher(boolean retry) throws Exception { Key key = GetKey(); //此处需要拼接参数 Cipher cipher = Cipher.getInstance(TRANSFORMATION); try { cipher.init(Cipher.ENCRYPT_MODE | Cipher.DECRYPT_MODE, key); } catch (KeyPermanentlyInvalidatedException e) { _keystore.deleteEntry(KEY_NAME); if (retry) { createCipher(false); } else { throw new Exception("Could not create the cipher for fingerprint authentication.", e); } } return cipher; } 这个TRANSFORMATION的拼接是由KEY_ALGORITHM、BLOCK_MODE、ENCRYPTION_PADDING三个变量拼接成的
  • keycloak 将 url 重定向到 http 而不是 https(keycloak redirects urls to http instead of https)
    问题 我在 SSL 终止 nginx 代理后面有一个 keycloak 设置。 当我尝试访问使用 keycloak 保护的应用程序时,keycloak 生成如下 url: https://keycloak.mydomain.com/auth/realms/AdfsDemo/protocol/openid-connect/auth?client_id=adfs&redirect_uri=http%3A%2F%2Fmyapp.mydomain.com%2Fsignin-oidc&response_type=code&scope=openid%20profile&response_mode=form_post&nonce=636603226928179925.MmUzYWEzMGYtNTAxOS00MTBkLTk4MWItMDU3MGY1NjAxOGViNzlhYmZiMDQtNTQyOC00Y2YzLTk2MjMtZjNjMWFjNTI1YzM3&state=CfDJ8NQosUp9FsZBgifUu0XsVAEasSeKTitMPUM5yatTiQGf_Kz_X9CpQNPIHOkGr1hsgdErjhbw4ULINvCJgnFdWYctcIuhoyhOTt2Km3xy0qFh4o9gNFkPQlbEqc771MmVC2FUqUtvDqf8zChsyDDfGkxZ6Kc1y36I
  • 如何在.NET中验证RSA-SHA512 XML签名?(How to Verify a RSA-SHA512 XML Signature in .NET?)
    问题 借助有关SignedXml的MSDN站点,我可以轻松地验证XML DSig是否正确。 如果使用签名方法sha1,它会完美地工作。 但是,当我收到SignatureMethod RSA-SHA512 (http://www.w3.org/2001/04/xmldsig-more#rsa-sha512)时, CheckSignature()中断,并出现CryptograhicException:无法为签名创建SignatureDescription提供的算法。 似乎CheckSignature()无法验证RSA-SHA512签名。 有人知道如何检查这些签名吗? 从MSDN站点获取的代码是: public static bool VerifyXml(XmlDocument doc, bool removeSignatureElement = false) { // Check arguments. if (doc == null) throw new ArgumentException("doc"); // Create a new SignedXml object and pass it the XML document class. SignedXml signedXml = new SignedXml(doc); // Find the "Signature" node
  • Keycloak【学习记录】
    目录 Keycloak登录 单点登录第三方授权LDAP & AD & Cluster 支持的平台集成Realm(领域)管理方面 主控室账户管理控制台 更换密码Session管理登录界面 Authentication Flows密码规则OTP(One Time Password)用户第一次登录校验 优缺点 优点不足 参考资料 Keycloak Keycloak:是针对现代应用程序和服务的开源身份和访问管理解决方案。 目标:简化安全性,使用很少甚至没有代码即可轻松保护应用程序和服务的安全。开箱即用地提供了开发人员通常必须为自己编写的安全功能,可以轻松地针对组织的个性化需求进行定制。 提供的服务: 可自定义的用户界面,用于登录,注册,管理和帐户管理和LDAP和Active Directory服务器做集成将身份验证委派给第三方身份提供商,例如Facebook和Google 登录方面 单点登录 用户通过 Keycloak 进行身份验证。我们自身的应用程序不必处理登录表单,认证用户和存储用户。登录Keycloak后,用户无需再次登录即可访问其他应用程序。 Keycloak 提供单点注销,这意味着用户只需注销一次即可注销所有使用 Keycloak 的应用程序。 第三方授权 通过管理控制台轻松添加启用社交网络登录的功能。只需选择要添加的社交网络即可。无需代码或更改应用程序。
  • 使用 nginx 的 Keycloak 重定向 url 将转到 http 而不是 https(Keycloak Redirect url with nginx is going to http rather than https)
    问题 Keycloak 正在使用带有 nginx 配置的反向代理,以便在 ssl(https) 中可用。 现在我已经在 ubuntu 中部署了 .net 核心应用程序。 此应用程序位于 http 中,并使用 keycloak 作为 openid 连接进行身份验证。 但是,当应用程序使用 nginx 托管在 https 中时,keycloak 会显示无效的重定向 url 而不是登录页面。 Keycloak 登录 url 页面包含带有 http 而不是 https 的 redirect_uri 参数。 请帮助解决在反向代理的 nginx 配置文件中完成的配置 server { listen 443 ssl; server_name abc.ctech.com; ssl_certificate /etc/nginx/external/wildcard_ctech_com.pem; ssl_certificate_key /etc/nginx/external/private.rsa; location / { proxy_http_version 1.1; proxy_set_header Host abc.ctech.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto
  • 理解SSL/TLS系列 (五)握手协议
    一、概述 由于当前TLS1.2使用最为广泛,本文描述的内容都基于TLS1.2 握手是 TLS 协议中最精密复杂的部分。在这个过程中,通信双方协商连接参数,并且完成身份验证。根据使用的功能的不同,整个过程通常需要交换 6~10 条消息。根据配置和支持的协议扩展的不同,交换过程可能有许多变种。在使用中经常可以观察到以下三种流程:(1) 完整的握手, 对服务器进行身份验证;(2) 恢复之前的会话采用的简短握手;(3) 对客户端和服务器都进行身份验证的握手。 握手协议消息的标头信息包含消息类型(1 字节)和长度(3 字节),余下的信息则取决于消息类型: struct { HandshakeType msg_type; uint24 length; HandshakeMessage message; } Handshake; 握手协议包含以下四种子协议。 握手协议的职责是生成通信过程所需的共享密钥和进行身份认证。这部分使用无密码套件,为防止数据被窃听,通过公钥密码或 Diffie-Hellman 密钥交换技术通信。密码规格变更协议,用于密码切换的同步,是在握手协议之后的协议。握手协议过程中使用的协议是“不加密”这一密码套件,握手协议完成后则使用协商好的密码套件。警告协议,当发生错误时使用该协议通知通信对方,如握手过程中发生异常、消息认证码错误、数据无法解压缩等。应用数据协议
  • id_rsa.pub file SSH Error: invalid format
    My co worker and I have been trying to get my macbook to ssh into our AWS production server with no luck, this did work several months ago, but when we went to do it yesterday - we kept getting the following error message. (I have replaced my username and hostname with a placeholder on all below sections) $ ssh titan-data Load key "/Users/aronlilland/.ssh/id_rsa.pub": invalid format user@my_ip_address: Permission denied (publickey). Relavant config file data <!-- config file --> Host titan-data HostName my_ip_address User user IdentityFile ~/.ssh/id_rsa.pub AddKeysToAgent yes I have gone
  • Keycloak Redirect url with nginx is going to http rather than https
    Keycloak is using reverse proxy with nginx configuration to be available in ssl(https). Now i have deployed .net core aplication in ubuntu. This application is in http and is using keycloak as openid connect for authentication. However, when the aplication is hosted in https using nginx, keycloak is showing invalid redirect url instead of login page. Keycloak login url page contains redirect_uri parameter with http instead of https. Please help to resolve Configuration done in configuration file in nginx for reverse proxy server { listen 443 ssl; server_name abc.ctech.com; ssl_certificate /etc
  • 安全的SSL/TLS配置推荐及其原理
    作者原始博客地址为 https://blog.ertuil.top/post/tech/security-tls/。 一、SSL/TLS 背景 如今已经是 2019 年了,大部分的 HTTP 服务器都默认配置了 SSL/TLS ,以为大家提供安全的、具有隐私性的网络服务。 但是安全的配置 TLS 往往是困难的,如果配置不当可能会导致性能低下、安全性能减弱等问题。因此这篇文章以 Nginx 服务器为例,讲解如何安全的配置 ssl 服务器。 早期的 SSL(安全套接字协议)是由网景公司发布的提供安全连接的服务,发布了 SSL1.0, SSL2.0, SSL 3.0 三个版本。后来 IETF 将其标准化,并作为 TLS 协议(传输层安全协议)发布了 TLSv1.1 和 TLSv1.2 协议。 2018年,最新的 TLSv1.3 协议发布。目前主要使用的版本是 TLSv1.2 和 TLSv1.3 两个版本,早期的版本已经不再建议使用了。 TLS 协议主要使用了如下一些密码学算法来提供安全服务: 身份认证:服务器需要证明自己就是真实的服务器,防止了恶意服务器假冒真实网站提供服务。秘钥交换:服务器和浏览器需要协商出一个秘钥,用于后续消息的加密和验证。数据机密性保护:使用了上述协商出来的秘钥,来对信息进行加密,使得他人不能读取消息的内容。消息完整性保护:要保护消息没有被恶意篡改(即便是加密的信息
  • How to encrypt bytes using the TPM (Trusted Platform Module)
    How can I encrypt bytes using a machine's TPM module? CryptProtectData Windows provides a (relatively) simple API to encrypt a blob using the CryptProtectData API, which we can wrap an easy to use function: public Byte[] ProtectBytes(Byte[] plaintext) { //... } The details of ProtectBytes are less important than the idea that you can use it quite easily: here are the bytes I want encrypted by a secret key held in the System give me back the encrypted blob The returned blob is an undocumented documentation structure that contains everything needed to decrypt and return the original data (hash
  • Java 1.7 + JSCH: java.security.InvalidKeyException: Key is too long for this algorithm
    I'm trying to use JSCH to upload a file to a remote SFTP share. Every time I attempt to connect to the share from within my code, I get an exception that looks something like this: com.jcraft.jsch.JSchException: Session.connect: java.security.InvalidKeyException: Key is too long for this algorithm at com.jcraft.jsch.Session.connect(Session.java:558) ~[jsch-0.1.51.jar:na] at com.jcraft.jsch.Session.connect(Session.java:183) ~[jsch-0.1.51.jar:na] I've seen posts that describe this error when upgrading to Java 8, but we're still on Java 7, and I don't know enough about Java's cryptography support
  • keycloak redirects urls to http instead of https
    I have a keycloak setup behind SSL terminating nginx proxy. When i try to access application secured using keycloak, keycloak generates url like following: https://keycloak.mydomain.com/auth/realms/AdfsDemo/protocol/openid-connect/auth?client_id=adfs&redirect_uri=http%3A%2F%2Fmyapp.mydomain.com%2Fsignin-oidc&response_type=code&scope=openid%20profile&response_mode=form_post&nonce=636603226928179925.MmUzYWEzMGYtNTAxOS00MTBkLTk4MWItMDU3MGY1NjAxOGViNzlhYmZiMDQtNTQyOC00Y2YzLTk2MjMtZjNjMWFjNTI1YzM3&state=CfDJ8NQosUp9FsZBgifUu0XsVAEasSeKTitMPUM5yatTiQGf_Kz
  • IPSec VPN
    IPSec框架 IPSec是一个框架,它不是具体指某个协议,而是定义了一个框架,由各种协议组和协商而成。该框架涉及到的主要有加密算法、验证算法、封装协议、封装模式、密钥有效期等等。 散列函数 主要算法包含MD5与SHA-1,主要任务是验证数据完整性。 主要使用HMAC(密钥化散列信息认证代码)方式 这项技术不仅能够实现完整性校验,还能完成源认证的任务,例如:ip ospf message-digest-key 1 md5 cisco 命令,配置预共享密钥cisco,这种加上与共享密钥一起进行散列计算的技术叫做HMAC。 特点: 散列值长度固定 MD5:128bit SHA1:160bit雪崩效应不可逆唯一性 加密算法 对称加密:DES,3DES,AES,RC4 非对称加密:RSA,DH(IPSEC 产生密钥资源的主要协议),ECC 对称加密算法 特点 对称秘钥算法:用相同的秘钥进行加减密。 加解密过程 加密:明文数据 -----共享秘钥加密 --------密文数据 解密:密文数据 -----共享秘钥解密 --------明文数据 对称加密算法优点 速度快安全紧凑 对称加密算法缺点 明文传输共享秘钥,容易出现中途劫持和窃听的问题。秘钥数量是以参与者数量平方的速度增长。即指数增长 。因为数量过多,所以管理和存储会有很大问题。不支持数字签名和不可否认性。适用做大数据加密。 常见对称算法
  • Linux中ssh配置详解
    Linux中ssh配置详解 一、SSH概述 1、ssh定义 百度百科中的解释:SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。 简单来说,ssh是一种网络协议,是一个提供数据通信安全、远程登录、远程指令执行等功能的安全网络协议(允许用户远程向服务器发送shell命令,并让它们执行),最初提出目的是替代非安全的Telnet(23端口,没有使用加密连接)、rsh、rexec等远程Shell协议。之后SSH发展了两个大版本SSH-1和SSH-2。如果一个用户从本地计算机,使用ssh协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。需要指出的是,ssh只有一种协议,存在多种实现(OpenSSH: ssh协议的开源实现,dropbear
  • jsonwebtoken
    jsonwebtoken 用法 jwt.sign(payload, secretOrPrivateKey, [options, callback]) (异步)如果提供回调,则使用err或JWT 调用回调。 (同步)将JsonWebToken返回为字符串。 payload必须是一个object, buffer或者string。请注意, exp只有当payload是object字面量时才可以设置。 secretOrPrivateKey 是包含HMAC算法的密钥或RSA和ECDSA的PEM编码私钥的string或buffer。 options: algorithm:加密算法(默认值:HS256) expiresIn:以秒表示或描述时间跨度zeit / ms的字符串。如60,“2 days”,“10h”,“7d”,Expiration time,过期时间 notBefore:以秒表示或描述时间跨度zeit / ms的字符串。如:60,“2days”,“10h”,“7d” audience:Audience,观众 issuer:Issuer,发行者 jwtid:JWT ID subject:Subject,主题 noTimestamp header keyid mutatePayload 如果为真,符号函数将直接修改有效载荷对象。如果在声明被应用到负载之后,但在它被编码到令牌之前
  • Defcon 2018 Qualify: Easy Pisy writeup
    文章目录 Defcon 2018 Qualify: Easy Pisy1. Source Code2. Writeup3. Info4. Analysis of Author4.1 janmasarik4.2 nneonneo (Robert Xiao)4.3 Marc Stevens4.4 Elie Bursztein (Google) 5. 语言中的签名函数5.1 php5.1.1 [standards library](https://www.php.net/manual/zh/refs.crypto.php)5.1.1.1 [Hash](https://www.php.net/manual/zh/book.hash.php)5.1.1.2 [密码散列算法函数](https://www.php.net/manual/zh/ref.password.php) 5.1.2 第三方库5.1.2.1 [OpenSSL](https://www.php.net/manual/zh/ref.openssl.php) 5.2 python5.2.1 standards library5.2.1.1 [hashlib](https://docs.python.org/3.6/library/hashlib.html)5.2.1.2 hmac 5.2.2 第三方库5.2.2.1