标签: saml

我应该如何为SAML WebSSO配置文件实现HTTP POST协议绑定?

我已经使用HTTP POST协议绑定在Web SSO的SAML配置文件之后实现了我的服务提供者和识别提供者.但是,<AuthnStatement>如果来自服务提供商的HTTP POST与身份提供商上的会话无关,身份提供商将如何提供,我感到有点困惑.

有人可以告诉我怎么能做到这一点?

我可以使用的另一种方法是HTTP重定向绑定,但这需要用户代理干预(即浏览器),通常使用User-Agent作为pass-thru中介来促进请求 - 响应消息交换.因此,我宁愿使用HTTP POST,因为消息交换发生在服务器端,因此用户看不到屏幕上发生任何事情.

但是,对于我如何能够将会话与请求联系起来,使用HTTP重定向更有意义.由于通过用户代理促进了HTTP重定向,因此对IdP的请求将具有会话(如果先前已经过身份验证).我没有得到的是如何发送<AuthnRequest>HTTP重定向. 由JST回答

所以我有点困惑,很想听听其他人在做什么.以下是我的问题:

  1. 使用HTTP POST协议绑定IsPassive选项<AuthnRequest>,如何将服务提供者的请求绑定到身份提供者的会话?换句话说,如果POST来自服务提供商(在技术上是匿名会话),身份提供商如何知道谁在提出请求?
  2. 使用HTTP重定向协议绑定,<AuthnRequest>如果我使用HTTP重定向,如何发送到身份提供程序? 由JST回答

UPDATE

如果我在上面的解释中不清楚,请注意混淆.我正在实现IdP和SP(通过插件).IdP是一个现有的应用程序,我希望SP(第三方系统)用于身份验证(即Web SSO).我正在开发一个简单的PoC.SP实际上是第三方Spring应用程序,我正在开发一个插件来执行SAML操作.

我应该提到我正在尝试使用该IsPassive选项,这意味着用户代理在消息交换期间不起作用.它只是启动SAML派对的催化剂.对?考虑到这一点,假设用户在步骤1中是匿名的,那么SP向IdP发送了什么以允许IdP确定用户是否已经过身份验证?由于IsPassive,HTTP POST不会通过User-Agent发送


UPDATE

问题1修订:如何IdP进行解析委托时,AuthnRequset与发送IsPassive的选项?

直接从SAML 2.0配置文件,第15页,第417到419行:

在步骤4中,通过在此配置文件范围之外的某些方式提供的标识来标识主体.

我真正想要的是解释如何实施some means.

redirect http-post saml post-redirect-get

13
推荐指数
1
解决办法
3万
查看次数

Python中的SAML 2.0服务提供程序

我期待在Python中实现基于SAML 2.0的服务提供程序.

我的网络应用程序目前都是Flask应用程序.我计划制作一个Flask蓝图/装饰器,允许我将单点登录功能放入预先存在的应用程序中.

我已经广泛研究了python-saml,不幸的是有依赖性问题不值得解决,因为我有太多预先存在的服务器/应用程序,而环境将无法兼容.

PySAML2看起来可以工作,但是文档很少,而且我可以理解哪些文档很难理解.Flask应用程序中没有使用PySAML2的示例.

我拥有的身份提供商是Okta.我有Okta设置,以便在我登录Okta后,我被重定向到我的应用程序.

任何人都可以提供有关使用PySAML2的任何建议,或者建议如何使用正在访问我的应用程序的SAML 2.0对用户进行最佳身份验证?

python saml flask saml-2.0

13
推荐指数
1
解决办法
1万
查看次数

SAML NameId政策

我是单点登录(SSO)概念的新手.我发现SAML请求和响应是实现SSO过程的最佳方式.然后我开始阅读有关SAML2.0的内容.我在saml2.0中找到了一个名为 NameIdPolicy 的术语,而saml1.0中则没有.

定义说它是我们从IdP请求的NameID的格式.我想知道那种格式是什么?我的意思是来自IDP的数据应该以NameIDPolicy指定的格式出现?任何人都可以向我介绍这个NameIdPolicy概念吗?

saml

12
推荐指数
1
解决办法
1万
查看次数

如何使用SAML和Shibboleth实现或集成单点登录

我们有两个独立的产品,包括网络应用和服务器.

我们希望为它们实现单点登录,因此当用户登录到一个产品时,他可以自动访问属于他的其他产品中的资源.

我已经进行了一些探索,发现SAML是一种很好的方法,我们可以采取,但我们不确定如何继续.

实施我们自己的服务提供商是个好主意吗?我看过Shib SP,但看起来如果我想将它集成到我的产品中,它也不会那么容易.

所以我只是寻找之前遇到类似问题的人的一些建议.

另一个问题是,如果我需要使用OpenSaml实现SP,我可以学习哪些资源?看起来我没有很多可以参考的教程或示例.

如果有人能指出我自己的SP需要包含的一些大程序或组件,我也会非常感激.

编辑1:

试着提供我想要的更多细节.我们有两个独立的产品.目前,我们能够外部化用户数据库.例如,我们的产品可以被配置为连接到LDAP服务器或任何其他外部用户DB,只要它们正确实现服务即可.

现在我们的目标是为我们的两种产品提供SSO.一种情况是我们在两种产品中都有自己的SP组件(实现或集成).客户可能拥有自己的IdP.通过一些配置,我们的SP可以连接到他们的IdP,并从那里进行身份验证,用户无需登录两次即可访问这两种产品.当然,如果客户没有,我们可以提供开箱即用的IdP.

java saml shibboleth single-sign-on

12
推荐指数
1
解决办法
2万
查看次数

Python - 使用 SAML 2.0 登录站点

我很难找到资源来帮助我解决我遇到的问题。我有一个使用 SAML 2.0 保护的网站。有人可以向我指出显示如何使用 SAML 2.0 登录站点的资源吗?大多数 python 模块似乎都与实现 SAML 2 有关,我只需要登录到实现 SAML 2.0 的站点即可。

谢谢

J

python saml python-2.7 saml-2.0

12
推荐指数
1
解决办法
2万
查看次数

使用SAML集中登录并使站点作为身份提供者工作

所以我的场景如下:

我有两个站点a.com和站点b.com以及一个身份验证服务器cauth.com.

客户想要的是......

当用户登陆a.com或b.com用户填写相应网站上的登录表单时,表单的操作将在cauth.com上(cauth.com/authenticate).当用户在cauth上进行身份验证时,他会在两个站点上进行身份验证.

我正在考虑实现SAML以实现相同的流程就像在身份验证之后iDP(cauth.com)将向服务提供商发送SAML响应,并且用户将被授予对这两个站点的访问权限.

我是SAML的新手,无法获得相同的文档和理解.

我想知道的是:

  1. 我的问题解决方案值得实施吗?
  2. 是否可以将网站(cauth.com)作为身份提供者.我已经看过线程使您的PHP网站成为SAML身份提供商但无法获得正确的解决方案.

php saml

12
推荐指数
1
解决办法
1743
查看次数

配置GitLab以将SAML OmniAuth与Active Directory IdP一起使用

我正在更改GitLab要使用的现有安装SAML而不是LDAP身份验证.

此时,用户可以使用"使用Saml登录"按钮成功登录Web应用程序.但是,我不清楚LDAP和SAML方法之间的区别是什么:通过LDAP登录创建帐户的用户可以使用他们的LDAP用户名访问Git存储库(例如使用clone,push,...)和密码,但通过SAML登录创建帐户的用户不能.

通过实验,我发现用户可以访问Git存储库,如果他们使用GitLab UI在初始SAML交互期间创建的帐户上设置单独的GitLab帐户密码.在一个新用户帐户下创建项目后出现的GitLab消息指向了这个方向:'在您的帐户上设置密码之前,您将无法通过HTTPS提取或推送项目代码'.

这个单独的密码配置似乎有可能是必要的,因为我错误地配置了SAML集成.所以,我的问题是,无论我是错的期望,验证访问GitLab托管Git仓库会的工作一样的,不管是否SAML还是LDAP使用?如果没有,是否有人知道我应该检查的相关SAML配置设置?

如果感兴趣:我已向该GitLab Google组发布了类似的问题,但我还没有收到任何回复.

git ldap saml omniauth gitlab

12
推荐指数
1
解决办法
883
查看次数

SimpleSAMLphp状态信息丢失

我在https://biz.dev.originsystems.co.za上设置了服务提供商.我在http://stage.originsystems.co.za上设置了IdP .

使用https://biz.dev.originsystems.co.za/simplesaml/module.php/core/authenticate.php上的工具测试身份验证时,一切正常.它回到Dev网站,具有所需的属性,一切都快乐和快乐.

但是,当我尝试在https://biz.dev.originsystems.co.za上的代码中实际点击IdP时,我被重定向到舞台登录页面但登录后我收到"状态信息丢失"错误.我得到以下调试信息:

SimpleSAML_Error_NoState: NOSTATE

Backtrace:
2 /webdevroot/Updraft/web/external/System/SSO/simplesaml/lib/SimpleSAML/Auth/State.php:225 (SimpleSAML_Auth_State::loadState)
1 /webdevroot/Updraft/web/external/System/SSO/simplesaml/modules/saml/www/sp/saml2-acs.php:63 (require)
0 /webdevroot/Updraft/web/external/System/SSO/simplesaml/www/module.php:134 (N/A)
Run Code Online (Sandbox Code Playgroud)

我已经完成了页面要求我做的所有故障排除,但情况仍然存在.

我在浏览器上打开了开发工具并观看了cookie信息.biz.dev.originsystems.co.za的cookies包含一个SimpleAMLAuthToken,因此我认为cookie正在运行.我用来点击IdP的代码是:

$as = new SimpleSAML_Auth_Simple("stage-sso-sp");
$as->requireAuth();
$attributes = $as->getAttributes();
print_r($attributes);
Run Code Online (Sandbox Code Playgroud)

更新:

这里有更多信息......

我想确定问题是否与我如何设置IdP有关,所以我开始使用SSO Circle作为IdP.在SSO Circle上进行身份验证后,状态信息也会丢失.我认为这意味着问题出在我的SimpleSAML服务提供商设置的某个地方.这是发生了什么......

当我访问https://biz.stage.originsystems.co.za/simplesaml上的SimpleSAML测试认证来源页面时,我有以下cookie值...

Name                                       Value
SimpleSAMLAuthToken                        _a53569c0701dd02832532df14cf10cd0b2d9fcd6b6
biz.stage.originsystems.co.za              10fc356e0bfbf707af5fa5854c378755
ccof                                       RGN002
xbrF                                       84aadc624fc51c0c9340d45645c08643
Run Code Online (Sandbox Code Playgroud)

除SimpleSAMLAuthToken之外的所有内容都来自我们的应用程序,不应影响SimpleSAML.一旦我被重定向到SSO Circle并进行身份验证,我将返回到我的SimpleSAML页面,并且Auth Token现在具有值,_39679e07cb1911e08b2bff3580a9929faddd07e9b6并且正确返回所有相关信息.日志文件显示以下活动.

Feb 02 12:58:22 simplesamlphp DEBUG [7c4534ae0a] Received SAML2 Response from 'http://idp.ssocircle.com'.
Feb 02 12:58:22 simplesamlphp DEBUG [7c4534ae0a] No certificate in message when …
Run Code Online (Sandbox Code Playgroud)

php saml simplesamlphp

12
推荐指数
1
解决办法
2784
查看次数

Impersonate java.lang.IllegalStateException:UserDetailsS​​ervice是必需的

我试图SwitchUserFilter在Spring中实现模拟,但是我遇到了错误.没有这个实现,项目运行良好.此外,该项目使用Java配置而非xml配置,并具有SecureAuth身份验证.并且代码中涉及到SecurityConfig类的部分是:

@Configuration
@ComponentScan(basePackages = {"com.project.*"})
@EnableWebMvcSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
@PropertySource("classpath:app.properties")
@Import({TransactionManagersConfig.class, MailConfig.class})
public class SecurityConfig extends WebSecurityConfigurerAdapter {

  @Autowired
  private SwitchUserFilter switchUserFilter;

  @Autowired
  protected AuthenticationSuccessHandler authenticationSuccessHandler;

  @Bean
  public UserDetailsService userDetailsServiceBean() {
    try {
        return super.userDetailsServiceBean();
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
  }

  @Bean
  public SwitchUserFilter switchUserFilter() {
    SwitchUserFilter switchUserFilter = new SwitchUserFilter();
    switchUserFilter.setUserDetailsService(userDetailsServiceBean());
    switchUserFilter.setUsernameParameter("username");
    switchUserFilter.setSwitchUserUrl("/switch");
    switchUserFilter.setExitUserUrl("/exit");
    switchUserFilter.setTargetUrl("/");

    return switchUserFilter;
  }

  //more beans

  @Override
  protected void configure(HttpSecurity http) throws Exception {
        http
                .headers().disable();
        http    //SAML CONFIG …
Run Code Online (Sandbox Code Playgroud)

java impersonation spring-security saml spring-saml

12
推荐指数
1
解决办法
1445
查看次数

使用用户名/密码进行SAML断言 - 消息的真实含义是什么?

我需要创建一些SAML 2.0断言,我很难找到XML应该是什么样子.大多数文档似乎是关于使用特定工具,而不是关于消息.我有很多可能的模式,但我找不到相关信息在实践中实际看起来像什么的例子.

业务规则说:为了创建共享标识,用户告诉系统A他们在系统B上的用户名和密码.系统A需要将此信息(以及一些人口统计信息)传达给系统B.系统B验证信息和通过返回一个唯一标识符,然后可以用来引用该用户.

有人能举例说明SAML 2.0声明带有这些信息的样子吗?

FWIW,我正在使用C#,并且需要以排除使用第三方工具的方式传递XML.

passwords saml federated-identity single-sign-on

11
推荐指数
1
解决办法
1万
查看次数