我已经使用 spring SAML 实现了 SSO,我想知道是否有任何方法可以请求 IDP(在我的例子中为ssocircle.com)向我发送其他属性以及它已经发送的 nameID。假设我希望 IdP 向我发送已成功通过身份验证的人员的 accountID。我进行了很多搜索并找到了一些建议,例如:
重写WebSSOProfileImpl .java 中的getAuthnRequest方法,以便发送到 IdP 的 authnRequest 具有此属性集。但我不知道如何继续下去?我是否也必须使用此附加属性名称和格式修改我的 SP 元数据?如果是,我该怎么做?或者可以使用 RelayState 参数来完成某些操作吗?在这方面的任何帮助将不胜感激。
谢谢,
阿比拉什
有什么方法可以阻止用户修改发送给服务提供商的SAML断言?
例如,如果SAML响应通过电子邮件地址标识了服务提供商的用户,则该断言中是否有任何内容可以阻止某人使用诸如Fiddler之类的东西对其进行修改,并将其电子邮件地址替换为该公司中具有他们尝试访问的服务的访问级别更高?
过去几天我一直在使用 simplesamlphp 测试 SAML 2.0。我的 SP 端连接到我公司的 IdP。我处于它工作的情况......大多数时候,这是令人困惑的部分。事实:
其他 5% 会抛出类似这样的错误:“无法找到当前绑定。”。不同之处在于,在我的日志中,它显示为:
Oct 21 17:30:15 simplesamlphp WARNING [6b6e3c270f] Unable to find the SAML 2 binding used for this request.array (\n)
Oct 21 17:30:15 simplesamlphp WARNING [6b6e3c270f] Request method: 'GET'array (\n)
Run Code Online (Sandbox Code Playgroud)
以上只是从上一篇文章修改的一个例子。请注意,我确实array在两行中都看到了。我查看了记录此错误的源代码,但我无法弄清楚它为什么存在(不确定它是否重要 - 似乎是由日志记录工具引入的)
这就是事情变得奇怪的地方!我有时会得到通常的(在无限递归左右)PHP 错误:Allowed memory size of …
我已经在 okta 上设置了一个开发人员帐户,并且正在尝试从我在那里设置的测试应用程序中解密加密的断言。所以我的本地 java Spring 应用程序有一个控制器正在接收 SAML 断言的 HTTP POST - 我已经验证了这一点,它没有被加密。现在打开加密后,我尝试用以下方法解密它:
private Assertion decrypt(EncryptedAssertion encryptedAssertion) {//throws DecryptionException, KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException, UnrecoverableEntryException {
StaticKeyInfoCredentialResolver keyInfoCredentialResolver = new StaticKeyInfoCredentialResolver(spConfig.getCredential());
Decrypter decrypter = new Decrypter(null, keyInfoCredentialResolver, new InlineEncryptedKeyResolver());
decrypter.setRootInNewDocument(true);
try {
return decrypter.decrypt(encryptedAssertion);
} catch (Exception e) {
log.debug("oops", e.getCause());
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
使用此 SP 配置代码:
private static final String KEY_STORE_PASSWORD = "mypassw";
private static final String KEY_STORE_ENTRY_PASSWORD = "mypassw";
private static final String KEY_STORE_PATH = "/keystore.p12";
private static final …Run Code Online (Sandbox Code Playgroud) 我正在使用https://github.com/apokalipto/devise_saml_authenticatable在 Ruby on Rails 应用程序中通过 SAML 针对 Okta 实现登录。
使用上述说明设置示例应用程序后,尝试导航到 /users/saml/log_in 时出现以下错误
ActionController::RoutingError (uninitialized constant SamlSessionsController):
activesupport (5.1.6) lib/active_support/inflector/methods.rb:269:in `const_get'
activesupport (5.1.6) lib/active_support/inflector/methods.rb:269:in `block in constantize'
activesupport (5.1.6) lib/active_support/inflector/methods.rb:267:in `each'
activesupport (5.1.6) lib/active_support/inflector/methods.rb:267:in `inject'
activesupport (5.1.6) lib/active_support/inflector/methods.rb:267:in `constantize'
actionpack (5.1.6) lib/action_dispatch/http/request.rb:85:in `controller_class_for'
actionpack (5.1.6) lib/action_dispatch/http/request.rb:78:in `controller_class'
actionpack (5.1.6) lib/action_dispatch/routing/route_set.rb:43:in `controller'
actionpack (5.1.6) lib/action_dispatch/routing/route_set.rb:29:in `serve'
actionpack (5.1.6) lib/action_dispatch/routing/mapper.rb:16:in `block in <class:Constraints>'
actionpack (5.1.6) lib/action_dispatch/routing/mapper.rb:46:in `serve'
actionpack (5.1.6) lib/action_dispatch/journey/router.rb:50:in `block in serve'
Run Code Online (Sandbox Code Playgroud)
不确定是什么导致了上述错误。我已确保 gem 是 Gemfile 的一部分并且已安装。
还有什么我可以调查的吗?
我正在使用一些遗留代码来修复有关登录重定向的错误。简而言之,当用户加载包含登录页面链接的页面,单击进入 SSO 登录页面的登录链接,然后登录该 SSO 页面时,他们不会被重定向到主页,而是会被重定向到主页。他们最后的页面。经过研究,以前的开发人员解决这个问题的方法是将“深层链接”保存为会话数据中的变量(其会话 ID 保存在客户端的 cookie 中和服务器的内存中)。理论上,用户登录时应该从会话数据中检索到深层链接,然后他们应该被重定向。但是,这就是发现问题的地方:第二次调用(当用户登录时)中的会话 ID 具有不同的会话 ID,因此在此会话 ID 的会话数据中找不到匹配的深层链接。
我可以证明会话 ID 已正确存储在 Chrome 和 SAML Tracer 的 cookie 中,并且 SAML 调用连续发生,中间没有发生其他调用。我没有看到会话 ID 在参数或 http 标头中传递(尽管用户登录后应访问的正确链接作为第一个 SSO 请求中的引用者传递)。
我还应该注意,我们正在使用 ComponentSpace 的 SAML 库。此外,当首次调用转到 SSO 页面时,重定向时会出现 302 Found 错误。我认为这是故意的,但我不能百分百确定。SSO 是 ADFS。
公司里已经没有人参与过这段代码的工作了,而且这个代码库和这些库对我来说都是新的。我还不确定这是否是此应用程序或我们连接到的自定义 SSO 网站的问题,我需要以某种方式证明这一点。根据 TFS,我们与此问题相关的代码在两年或更长时间内都没有发生更改。
我的问题:
以下是用户单击登录页面链接时第一次 SSO 调用的代码:
public ActionResult SingleSignOn()
{
try
{
if (!string.IsNullOrEmpty(ssoUrl))
{
_accountRespository.SetDeepLink();
var sessionId = System.Web.HttpContext.Current.Session.SessionID;
// Redirect to SSO Site. Reentry …Run Code Online (Sandbox Code Playgroud) 我不明白身份服务器和身份提供者之间的区别。它们相同吗?身份服务器可以充当跨域应用程序的身份提供者吗?
我们需要为我们的项目实现opensaml2.0的Identity provider实现.有没有人知道如何开始...你的回答非常感谢...
我可以在localhost环境下测试shibboleth IdP和SP吗?
我只有一台电脑(Win7)
几天前,我下载了java-saml-2.0.1,希望通过它在我的(SP)应用程序中通过SAML实现SSO。我实际上不是Java开发人员(我是C#),但是仍在进行此工作。也不太熟悉SSO / SAML,因此请原谅一些愚蠢的问题。
1)如何为我的项目添加依赖项?我的POM.xml文件中有此文件。这够了吗 ?
<dependency>
<groupId>com.onelogin</groupId>
<artifactId>java-saml</artifactId>
<version>2.0.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
2)我正在阅读本文:对Java应用进行编码以通过OneLogin提供SSO。假设这适用于java-saml-2.0.1,为什么会说我需要/ com下的文件?我是否应该在项目中复制这些文件?我不引用整个程序包吗?
3)查看dologin.jsp,此代码做什么?
Auth auth = new Auth(request, response);
if (request.getParameter("attrs") == null) {
auth.login();
} else {
String x = request.getPathInfo();
auth.login("/java-saml-tookit-jspsample/attrs.jsp");
}
Run Code Online (Sandbox Code Playgroud)
它检查request.getParameter(“ attrs”),但不使用它。它设置String x,但随后不使用它。为什么?
4)设置AccountSettings时,我可以跳过证书并稍后再做吗?还是总是需要它?
5)本质上,我们正在实现此目标,第一步是让我的SP应用程序实现步骤2:(SP-> UA)重定向到IdP SSO服务。因此,当用户尝试访问我的SP时,我需要创建一个SAML令牌(?)并将其发送到IdP。我怎么做?这就是我卡住的地方。
我看了一下示例,但是我不知道要配置设置,所以它不起作用。
顺便说一句:IdP是由不同部门管理的内部应用程序。