问题标签 [pac4j]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
oauth-2.0 - 在授权代码授予工作流程中,应提出什么请求以将代码交换为令牌?
我正在尝试在我的后端 (BE) 应用程序中设置 Pac4j,为了配置我的 Angular 前端 (FE),我需要了解它期望的工作流程以便正确配置后端。
我一直在阅读大量文档并浏览 Pac4j 源代码,以了解如何在不暴露客户端机密的情况下从代码中获取令牌。
所以...
- 我尝试登录 FE->BE(没有身份验证)
- 我收到 401
- 我从 401 获取“位置”(Google auth uri)并重定向到它,提供回调 uri
- 我登录谷歌
- 我使用代码重定向回我的回调 uri
- (为了取回令牌,我向 BE 提出什么请求?即不需要 client_secret 的令牌 URI 在哪里)
- 我使用检索到的令牌通过 BE 正常访问和继续
java - 如何从当前会话中获取用户角色?
使用 Keycloak 登录我的系统后,我想从我登录的用户那里获取用户角色映射(在 keycloak 管理控制台上定义)。我能够获取名字、姓氏、ID、令牌 ID ,但是在尝试获取角色时,我得到一个空数组:
spring-security - OpenId Connect 身份提供者发起的反向通道注销不起作用
我正在开发一个在内部管理用户和会话的 java Spring Boot项目。它依赖于 OIDC,AWS Cognito 作为身份提供者,用于登录,并且我希望用户退出。我从OIDC Spec for backchannel logout中了解到的是:
我必须在我的后端应用程序中提供一个用于注销的端点。我在 java Spring Boot 应用程序中使用Pac4J作为我的 OIDC 库,并根据Pac4J Spring Security 文档
logout
启用了端点如果用户从身份提供者注销,则身份提供者AWS Cognito应向注销端点发送请求
当我在此端点上收到有效呼叫(根据 OIDC 规范)时,我必须销毁用户与我的应用程序的会话。
但是,从身份提供程序 (AWS Cognito) 注销的用户似乎不会导致调用我的应用程序的注销端点。
我无法在 AWS Cognito 文档中找到有关此反向通道行为的文档。
- 我是否正确理解了反向通道注销?
- 由于 OIDC 注销仍处于草稿状态(截至2019 年 3 月 12 日),这目前是否不受支持?
java - 玩框架 2,使用 pac4j 制作基于 sql 的自定义身份验证器
=== 更新 20190327 ===
感谢您的评论,但演示并没有太大帮助。在深入研究源代码后,我对框架有了更好的理解。
我需要的是
- 扩展的自定义客户端,
BasicClient
以便可以将自定义 CredentialsExtractor 馈送到框架中。(因为无法使用 ParameterClient 提取我的用户访问令牌) - 一个自定义的 CredentialsExtractor,它实现
CredentialsExtractor
了您在自定义客户端(覆盖clientInit
方法)中传递给框架的方法。 - 最后,传递给自定义客户端的自定义身份验证器。
这对我有用。
=== 原创 ===
我有一个现有的 play 2.6 应用程序。我正在集成 pac4j 并尝试进行身份验证。播放服务器提供 REST api。如果我理解正确,我需要的是一个带有 sql 身份验证器的 http 客户端。
http://www.pac4j.org/3.3.x/docs/authenticators/sql.html
如文档中所述,需要 DbProfileService。但它假定一个特定的用户表方案不适用于现有的数据库。
所以我想我需要实现一个自定义身份验证器。但我在网上找不到任何有用的例子。
那么任何人都可以启发我还是我做这项工作的方式不对?
java - SAML2.0 规范应如何发送响应
我已连接到两个不同的 saml2.0 身份提供者。测试 IdP https://hub.docker.com/r/kristophjunge/test-saml-idp/ 和第三方 idp。
我是 SAML 的新手,所以我可能在这里遗漏了一些东西。事实证明,测试 idp 与 ( https://github.com/pac4j/ratpack-pac4j-demo ) 的演示代码完美配合。登录时,上下文 Session 包含Pac4jSessionKeys.USER_PROFILE
.
但是,对于另一个 idp,配置文件不会在会话中结束。会话仅包含 Pac4jSessionKeys.REQUESTED_URL
登录时,该 id 以在https://en.wikipedia.org/wiki/SAML_2.0中指定的 XHTML 表单 响应此响应在正文中发送。测试 idp 的情况并非如此,它似乎与上面的测试代码配合得很好。
由于我不熟悉 SAML2.0,我想知道是否有我不知道的不同规格?
我必须自己解析 XHTML 正文吗?我想如果这是做事的标准方式,那么 ratpack 已经对此提供了支持。
grails - 使用 grails 实现社交媒体登录
我正在尝试使用 grails 实现 Google/LinkedIn 注册/登录。我从 spring security rest 插件开始,这是我的 application.groovy 文件:
我能够获取通过 Google 收集的用户数据,但在 LinkedIn 中,获取信息的 URL 存在问题。
这是我从 LinkedIn 收到的 XML 回复:
你有什么技巧来实现这个吗?您能在 LinkedIn 配置中看到任何缺失的参数吗?
提前致谢。
PD:这是我正在使用的插件文档:https ://alvarosanchez.github.io/grails-spring-security-rest/latest/docs/
keycloak - CAS 6.1 - Pac4J 的状态参数为空
我已经使用 LDAP/AD 和数据库设置了 CAS,它可以工作。现在我想添加 Keycloak,但我得到了一个关于状态的异常。
为了测试我添加了谷歌,但出现了类似的问题。
我可以在日志中看到 keyloak/google 的成功身份验证,这意味着 keycloak/google 原则上可以工作。问题接缝是,在重定向回 CAS 之后,会话已经结束。上下文中的会话存储是空的。因此,状态为空,无法匹配到 TST。当我withState = false
在 pac4j 中设置时,一切正常,但我想使用状态来保证安全。
在pac4j google group 的这个问题中,有人遇到了同样的问题,因为他没有使用标准端口,我也这样做了。但是更改为 80/443 并没有为我解决问题。我在本地主机上使用自签名 ssl 证书在 tomcat 9 中运行。
还有其他建议吗?
编辑
我几乎可以肯定,问题出在外部tomcat上。但到目前为止,我还没有找到关于如何正确设置外部 tomcat 的工作文档。打开以征求建议。
更新
Seams
就像cas-server-support-oauth-webflow
破坏了 pac4j webflow。如果我删除此依赖项,它将起作用。不知道这是一个错误还是应该以这种方式工作。如果没有 OAuth-Webflow,我将无法获得 Ldap/数据库的 access_token。
scala - pac4j-play SecureAction(扩展),类型不匹配
我正在尝试扩展 pac4j-play 模块的 SecureAction,因为我想要验证一些额外的内容并将其添加到请求中,以便在控制器中轻松访问。
但是我遇到了类型不匹配的编译问题,我似乎无法理解为什么。
我已经从原始类中导入了类似import scala.language.higherKinds
和其余部分的内容(请参阅https://github.com/pac4j/play-pac4j/blob/master/shared/src/main/scala/org/pac4j/play/scala/Security.斯卡拉)。SecureAction
以下行是问题:
这给出了类型错误:
“有趣”的事情是,当我直接从 pac4j-play 的SecureAction
案例类中复制/粘贴源代码到我的 IDE 中时,我得到了完全相同的编译错误。
什么可以使这个编译?它是 sbt 中的标志,还是我不知道的东西?
pac4j - 如何从 PAC4J 框架中使用 DbProfileService
我正在尝试使用数据库中的用户使用 PAC4J 框架实现安全层。PAC4J 文档推荐 DbProfileService,但我不知道如何使用它。
- 在哪里定义它?在 ConfigFactory 中?
- 验证在哪里进行?我的意思是用户,密码是否正确?也许我不应该关心,它是内部完成的。