标签: federated-identity

实现基于声明的安全性(WCF/ASP.NET)

在研究基于声明的安全性(或联合安全模型)主题之后.我一直在看到许多以CardSpace为例的例子.我读到的主要文章给出了一个非常好的主题解释,是微软在一个名为Zermatt的框架上的PDF.

我正在研究的基于声明的安全体系结构相当于将STS身份验证代理与STS授权代理结合使用.这样,当我创建新服务时,我需要做的就是确保该服务只接受授权代理发出的声明.如文章所述,授权代理只接受身份验证代理发出的声明.

在设置时,客户端尝试使用新服务时,必须通过身份验证代理 进行身份验证(发出经过身份验证的声明),然后获得授权 代理授权 (发布授权声明).

这一切都很好,花花公子,架构很清晰,但我没有看到如何实现STS.正如我所提到的,网络上的大多数(如果不是全部)示例都显示了如何使用CardSpace,但是当您有一个数据库备份您的身份验证方案时,这并不完全有效.

示例场景

替代文字http://img512.imageshack.us/img512/8329/claimsbasedsecurityza6.jpg

saml geneva-framework federated-identity wcf-security sts-securitytokenservice

6
推荐指数
1
解决办法
9417
查看次数


如何更改我的WCF的FederationMetadata.xml文件以进行各种部署?

我们有一个ADFS 2.0安装,适用于我们各种环境中的MVC应用程序.我相信它使用"被动身份验证"(我仍然习惯于正确的术语) - 如果用户未登录并且adfs将用户重定向回我们的MVC应用程序,它肯定会将用户重定向到我们的adfs代理一旦他们登录.

我们现在开始公开一些安全的Web服务,并希望利用这个相同的身份验证系统.我的理解是,我想用它ws2007FederationHttpBinding作为我的绑定来做到这一点.我相信我有我的WCF的web.config所有设置,但我的斗争现在围绕FederationMetadata.xml文件.

看一下这个文件,我看到一些显然需要改变的东西,比如entityID="http://localhost/UserServices"证书.然后有些事我不知道它们是什么,是否需要改变,例如EntityDescriptor ID="_2b510fe8-98b8......<ds:SignatureValue>CZe5mEu19/bDNoZrY8f6C559CJ........

在哪里可以更好地了解如何为各种环境管理此文件?我有以下托管这些服务的环境,我们将以这种或那种方式进行部署:

  1. 各个开发人员工作站(现在是3倍,之后更多)
  2. 针对这些服务编写应用程序但不一定修改服务的人员的共享开发环境
  3. QA
  4. 分期
  5. 生产(具有不同证书/域/等的3种不同环境)

因此,我们有一个相当简化的流程,使用转换和查找/替换某些令牌来管理不同环境中的web.config文件,因此我想对此xml文件执行相同的操作.因此,最终,我正在寻找的是在FederationMetadata.xml为各种环境管理此文件时需要进行哪些更改.

我当前的FederationMetadata.base.xml文件在下面,我相信这是正确的(我只需要名称/角色),我只需要智能地替换各种令牌,例如~RootServiceUrlTokenToReplace~,在这里:

<?xml version="1.0" encoding="utf-8"?>
<EntityDescriptor ID="~EntityDescriptorIdTokenToReplace~" entityID="http://~RootServiceUrlTokenToReplace~" xmlns="urn:oasis:names:tc:SAML:2.0:metadata">
  <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:SignedInfo>
      <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
      <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
      <ds:Reference URI="#~ReferenceURITokenToReplace~">
        <ds:Transforms>
          <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
          <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
        </ds:Transforms>
        <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
        <ds:DigestValue>~DigestValueTokenToReplace~</ds:DigestValue>
      </ds:Reference>
    </ds:SignedInfo>
    <ds:SignatureValue>~SignatureValueTokenToReplace~</ds:SignatureValue>
    <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
      <X509Data>
        <X509Certificate>~CertificateTokenToReplace~</X509Certificate>
      </X509Data>
    </KeyInfo>
  </ds:Signature>
  <RoleDescriptor xsi:type="fed:ApplicationServiceType" protocolSupportEnumeration="http://schemas.xmlsoap.org/ws/2005/02/trust http://docs.oasis-open.org/ws-sx/ws-trust/200512" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:fed="http://docs.oasis-open.org/wsfed/federation/200706">
    <KeyDescriptor use="encryption">
      <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
        <X509Data> …
Run Code Online (Sandbox Code Playgroud)

wcf web-services federated-identity adfs2.0

6
推荐指数
1
解决办法
4149
查看次数

解析webconfig时出现Windows Azure间歇性身份错误

这个问题在发布后似乎随机发生. 该网站将正常工作,然后bam,我得到这个错误解析webconfig.我只是重新发布,它再次正常工作.发布时,我选中了该框以删除现有文件,因此不应该存在垃圾.

这是一个使用.net 4.5和Azure访问控制服务(ACS)与Yahoo!集成的MVC4项目.从Yahoo重定向时会发生此错误.这种方式每次都会发生,但我发现了一个帖子(当然我现在找不到),其中4.5.1 Identity和Access Visual Studio集成存在错误.我去了以前的版本,现在只是有时候.

ID8030:无法解析'type'属性的值.
验证'<issuerNameRegistry type="System.IdentityModel.Tokens.ValidatingIssuerNameRegistry, System.IdentityModel.Tokens.ValidatingIssuerNameRegistry"><authority name="[my authority]"><keys><add thumbprint="[print]" /></keys><validIssuers><add name="[issuer]" /></validIssuers></authority></issuerNameRegistry>'元素的type属性是否正确.

在上面的错误消息中,我已替换此帖子的括号([])中的项目.

这是堆栈跟踪:

[TypeLoadException: ID8030: The value of the 'type' property could not be parsed. *** element is correct.]
System.IdentityModel.Configuration.TypeResolveHelper.Resolve(ConfigurationElementInterceptor customTypeElement, Type customType) +602659
System.IdentityModel.Configuration.IdentityConfiguration.GetIssuerNameRegistry(IssuerNameRegistryElement element) +114
System.IdentityModel.Configuration.IdentityConfiguration.LoadHandlerConfiguration(IdentityConfigurationElement element) +841
System.IdentityModel.Configuration.IdentityConfiguration.LoadConfiguration(IdentityConfigurationElement element) +117
System.IdentityModel.Configuration.IdentityConfiguration..ctor(String identityConfigurationName) +180
System.IdentityModel.Services.Configuration.FederationConfiguration.LoadConfiguration(FederationConfigurationElement element) +392
System.IdentityModel.Services.Configuration.FederationConfiguration..ctor(Boolean loadConfig) +94
System.IdentityModel.Services.FederatedAuthentication.CreateFederationConfiguration() +71
System.IdentityModel.Services.FederatedAuthentication.get_FederationConfiguration() +85
System.IdentityModel.Services.HttpModuleBase.Init(HttpApplication context) +56
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +418
System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr …
Run Code Online (Sandbox Code Playgroud)

web-config azure federated-identity acs asp.net-mvc-4

6
推荐指数
2
解决办法
5753
查看次数

单点登录:我应该去哪个方向?

我有一个SaaS Web应用程序,可以满足多个教育机构的需求.所有客户端都托管在同一个应用程序/数据库中.该应用程序目前用C#编写,用于ASP.Net 4 Web窗体.

目前,我的应用程序使用本地/本机数据库进行用户身份验证/授权

我们的客户要求我们支持单点登录,其中客户端是身份验证提供者,而我的应用程序是消费者.

问题是客户端通过不同的协议/机制(如Shibboleth和OpenID Connect)要求SSO.这意味着我需要/应该创建一个适用于所有这些或至少可扩展的解决方案.

我遇到了Thinktecture的IdentityServer,我认为它可以抽象出我的客户使用的各种SSO机制,并将我的应用理解的基于声明的身份令牌返回给我的应用程序.

尽管我对这个概念感到苦苦挣扎.这是否意味着我的应用程序将所有身份验证请求重定向到IdentityServer,让IdentityServer来回处理OpenID Connect,然后从IdentityServer接收一个令牌以获取有关用户的信息?身份服务器如何知道用户的领域(即,它知道哪个客户端身份验证提供程序将用户发送到)?IdentityServer是否需要在我的应用程序的本地/本机数据库中验证用户的存在?IdentityServer可以同时处理SSO和本地登录吗?

是一个单独的身份服务器的方式去?看起来好像是,允许我的应用程序与一个点(身份服务器)集成.但是,Thinktecture的IdentityServer上没有很多文档,除了如何配置它.ADFS可能会提供类似的解决方案,但大多数示例都与ADFS和Azure有关.

最后,我假设我仍然会维护有关每个用户的本地/本机授权数据,因为第三方身份验证提供程序不可能知道我的应用程序的特定授权需求.

有什么想法或建议吗?

c# asp.net federated-identity single-sign-on thinktecture-ident-server

6
推荐指数
1
解决办法
1680
查看次数

配置Okta以在我们的SP应用程序和IdP之间进行调解

我们是一家服务提供商,其SAML启用了我们的应用程序,允许IdP为我们验证用户身份.确保每个人都在同一页面上

  • 身份提供者(IdP)是一个应用程序,其作用是对用户进行身份验证
  • 服务提供商(SP)是一种将身份和身份验证联合到IdP的最终应用程序
  • SAML是一种允许IdP向SP提供可信身份断言的协议.我们正在使用SAML 2.0(http://en.wikipedia.org/wiki/SAML_2.0)

有关联合身份的更多信息,请访问:http://developer.okta.com/docs/guides/saml_guidance.html

我们目前只使用Okta作为IdP,但遇到了需要与单独的IdP集成的情况.我们希望我们的应用程序只与Okta通信,并让Okta处理与这个单独的IdP交谈并验证他们的断言.由于我们的特定用例,我们的应用程序知道应该使用什么基础IdP,因此不需要IdP发现.

我们想配置Okta,以便身份验证流程如下:

  1. 我们的应用程序将用户重定向到Okta中的端点,指示使用基础IdP进行身份验证

  2. Okta和底层IdP做了认证用户和验证身份验证所需的一切

  3. 我们的应用程序获得一个响应(通过HTTP-POST)到我们的ACS终端验证用户,由Okta签名

从最终用户的角度来看,他们导航到service-provider.com,通过Okta重定向到underlying-idp.com,执行必要的身份验证,然后重定向回service-provider.com.最终用户不知道中间的Okta层,可能的例外是在重定向期间短暂出现在浏览器地址栏中的Okta URL.

到目前为止,我们已经能够在我们的Okta实例中设置入站SAML,以便可以通过底层IdP在Okta中对用户进行身份验证.我们的应用程序重定向到带有SAMLRequest的Inbound SAML配置页面中给出的端点,但这会将用户带到Okta仪表板,因为该链接仅用于验证Okta中的用户,而不是使用Okta对SP的用户进行身份验证.查看我们的相关配置:

我们如何配置Okta以便我们的用例可用?理想情况下,我们希望Okta充当中间人或调解员,检查并传递SAML请求/断言.具体来说,我们不需要对这些用户进行必要的Okta用户认证; 我们只需要Okta断言用户是他们所说的基于IdP的基础断言.

authentication federated-identity saml-2.0 okta

6
推荐指数
1
解决办法
1087
查看次数

AWS CLI 可以与联合登录一起使用吗?

我使用我公司的 Active Directory 账户登录 AWS。我们使用联合登录,描述在这里

联合用户和角色

联合用户不像 IAM 用户那样在您的 AWS 账户中拥有永久身份。要将权限分配给联合用户,您可以创建一个称为角色的实体并为该角色定义权限。当联合用户登录 AWS 时,该用户与角色关联并被授予角色中定义的权限。有关更多信息,请参阅为第三方身份提供者(联合)创建角色。

我的公司有一个安全令牌服务 (STS),它是 SAML 提供商。

我可以使用它登录 AWS 管理控制台,但我是否也可以使用联合登录名登录 AWS CLI?

federated-identity amazon-web-services aws-cli

6
推荐指数
2
解决办法
8320
查看次数

我们如何控制联邦用户启动的EC2实例数量?

我有一个用例,我需要限制联合用户只启动一个EC2实例,是否有任何解决方法来在策略中设置这些东西.

federated-identity amazon-web-services amazon-iam

6
推荐指数
1
解决办法
75
查看次数

使用 Google 对用户进行身份验证时如何通过 JWT 令牌获取用户角色

我正在尝试通过联盟使用 Google 作为我的应用程序的 IDP。

对于用户身份验证部分,我使用 openID 连接流程。

以下步骤已经完成。

  • 创建了一个 Google 应用程序
  • 获取客户端 ID 和客户端密钥
  • 在我的应用程序中配置了 Google 联合(使用 google 登录)
  • 身份验证流程正在成功运行
  • 令牌已成功检索

问题是我想将用户角色添加到已在 google 中注册的用户,并获取用户角色作为从 google 检索的令牌中的声明。

基本上我想根据用户角色向应用程序添加基于角色的身份验证。

那么如何创建用户角色并将其分配给 Google 用户,以及如何将它们作为 JWT 令牌中的声明来获取?

google-apps google-authentication federated-identity jwt openid-connect

5
推荐指数
0
解决办法
199
查看次数

使用 AWS Amplify 联合登录的 Chrome 扩展

我正在尝试使用 AWS Amplify 联合登录来实现基于 React 的 chrome 扩展。

我已经发现只要我使用 AWS Cognito 的标准身份验证,本教程就可以很好地工作。但是,当我尝试实现此处描述的联合登录时,我只收到以下错误。

当将 chrome.identity.launchWebAuthFlow 与 Cognito 一起使用时,一切正常,我收到一个令牌并可以对其进行解码。

关于如何解决这个问题有什么最佳实践或想法吗?

federated-identity google-chrome-extension reactjs amazon-cognito aws-amplify

5
推荐指数
0
解决办法
266
查看次数