问题标签 [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.

0 投票
1 回答
106 浏览

oauth-2.0 - 在授权代码授予工作流程中,应提出什么请求以将代码交换为令牌?

我正在尝试在我的后端 (BE) 应用程序中设置 Pac4j,为了配置我的 Angular 前端 (FE),我需要了解它期望的工作流程以便正确配置后端。

我一直在阅读大量文档并浏览 Pac4j 源代码,以了解如何在不暴露客户端机密的情况下从代码中获取令牌。

所以...

  1. 我尝试登录 FE->BE(没有身份验证)
  2. 我收到 401
  3. 我从 401 获取“位置”(Google auth uri)并重定向到它,提供回调 uri
  4. 我登录谷歌
  5. 我使用代码重定向回我的回调 uri
  6. (为了取回令牌,我向 BE 提出什么请求?即不需要 client_secret 的令牌 URI 在哪里)
  7. 我使用检索到的令牌通过 BE 正常访问和继续
0 投票
1 回答
856 浏览

java - 如何从当前会话中获取用户角色?

使用 Keycloak 登录我的系统后,我想从我登录的用户那里获取用户角色映射(在 keycloak 管理控制台上定义)。我能够获取名字、姓氏、ID、令牌 ID ,但是在尝试获取角色时,我得到一个空数组:

0 投票
1 回答
636 浏览

spring-security - OpenId Connect 身份提供者发起的反向通道注销不起作用

我正在开发一个在内部管理用户和会话的 java Spring Boot项目。它依赖于 OIDC,AWS Cognito 作为身份提供者,用于登录,并且我希望用户退出。我从OIDC Spec for backchannel logout中了解到的是:

  1. 我必须在我的后端应用程序中提供一个用于注销的端点。我在 java Spring Boot 应用程序中使用Pac4J作为我的 OIDC 库,并根据Pac4J Spring Security 文档logout启用了端点

  2. 如果用户从身份提供者注销,则身份提供者AWS Cognito应向注销端点发送请求

  3. 当我在此端点上收到有效呼叫(根据 OIDC 规范)时,我必须销毁用户与我的应用程序的会话。

但是,从身份提供程序 (AWS Cognito) 注销的用户似乎不会导致调用我的应用程序的注销端点。

我无法在 AWS Cognito 文档中找到有关此反向通道行为的文档。

  1. 我是否正确理解了反向通道注销?
  2. 由于 OIDC 注销仍处于草稿状态(截至2019 年 3 月 12 日),这目前是否不受支持?
0 投票
0 回答
188 浏览

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。但它假定一个特定的用户表方案不适用于现有的数据库。

所以我想我需要实现一个自定义身份验证器。但我在网上找不到任何有用的例子。

那么任何人都可以启发我还是我做这项工作的方式不对?

0 投票
0 回答
55 浏览

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 已经对此提供了支持。

0 投票
0 回答
94 浏览

grails - 使用 grails 实现社交媒体登录

我正在尝试使用 grails 实现 Google/LinkedIn 注册/登录。我从 spring security rest 插件开始,这是我的 application.groovy 文件:

我能够获取通过 G​​oogle 收集的用户数据,但在 LinkedIn 中,获取信息的 URL 存在问题。

这是我从 LinkedIn 收到的 XML 回复:

你有什么技巧来实现这个吗?您能在 LinkedIn 配置中看到任何缺失的参数吗?

提前致谢。

PD:这是我正在使用的插件文档:https ://alvarosanchez.github.io/grails-spring-security-rest/latest/docs/

0 投票
1 回答
277 浏览

cas - CAS 委托身份验证:cas pac4j 中的动态客户端 ID 和机密

我的配置如下

在登录页面中,我需要获取用户电子邮件 ID,并根据电子邮件 ID 从数据库中获取客户端 ID 和机密,然后在重定向 URL 中使用。

有可能实现这一目标吗?

0 投票
1 回答
1373 浏览

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。

0 投票
1 回答
89 浏览

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 中的标志,还是我不知道的东西?

0 投票
1 回答
62 浏览

pac4j - 如何从 PAC4J 框架中使用 DbProfileService

我正在尝试使用数据库中的用户使用 PAC4J 框架实现安全层。PAC4J 文档推荐 DbProfileService,但我不知道如何使用它。

  1. 在哪里定义它?在 ConfigFactory 中?
  1. 验证在哪里进行?我的意思是用户,密码是否正确?也许我不应该关心,它是内部完成的。