W3C 目前正在开发去中心化 ID (DID) 标准(请参阅此处)。与现有的OpenID、SAML等联合身份认证机制相比,这个新标准有哪些优缺点?为什么组织联盟会选择 DID 而不是传统的联合身份方法?
我需要实现一个应该能够实现的身份提供者服务(使用node.js)。
如果一切有效,则使用签名的 XML 响应示例进行响应
node.js 中是否有可以处理 SAML 协议的 IdP 端的工具。我熟悉samlify、saml2、Passport-saml,它们似乎都处理协议的服务提供商端。
如果这里提到的软件包可以满足我的需求,您能否指定它们到底如何处理这个问题。任何其他方向和/或提示可能会有帮助。
谢谢
当使用 Keycloak 作为应连接到(非 Keycloak)身份提供商 (IdP) 的服务提供商 (SP) 时,如何在 Keycloak 中安装签名证书?
更准确地说,Keycloak 应该用作身份代理(如Keycloak 文档中所述),并且 Keycloak SP 和 IdP 之间的通信将通过 SAML 2.0 协议来促进。
Keycloak 文档包含有关如何安装 SSL 证书以进行“正常”HTTPS 通信(例如在浏览器中)的信息,但我找不到有关安装要在与 IdP 的后端到后端 SAML 通信中使用的签名证书的任何信息。有谁知道如何做到这一点?
(也许Keycloak中只安装了一个证书,即该证书既用于SAML通信又用于其他非SAML Keycloak HTTPS通信?)
SAML,SSO是我项目中的一个新学习.我没有足够的时间来试验找到正确的工具/ API.请求你帮忙.
我需要实现SAML Client(在Java上),它必须能够发送SAML断言并从SAML提供者/服务器接收SAML响应.我应该使用哪种Java API在Java中编写SAML客户端?
我们的客户已经拥有SAML响应者/服务器,它接收SAML请求并发送带有用户配置文件和其他信息的SAML响应.但我们需要编写测试模拟器SAML响应器/服务器.我使用过Apache和Tomcat服务器.我应该使用哪些服务器/ API来实现此测试模拟器SAML响应器/服务器?
我们在WCF中使用自定义绑定来使用安全令牌(SAML)进行身份验证.我们发现我们正在获取服务器端,并且看到TokenHandler(派生自Saml11SecurityTokenHandler)正确处理并授权令牌然后返回新的ClaimsIdentity.
但是,当处理然后调用AuthorisationManager.CheckAccessCore(派生自IdentityModelServiceAuthorizationManager)时,operationContext.ServiceSecurityContext.PrimaryIdentity是一个没有填充任何内容的GenericIdentity.
我们在下面的绑定的http实现非常相似,并且工作正常,我们可以看到令牌被验证并返回ClaimsIdentity,然后我们观察AuthorizationManager处理相同的身份并允许它们通过.
该netTcp结合是基于代码之一,如下所示:
/// <summary>
/// NetTcp binding that supports a Saml token being passed
/// </summary>
public class SamlNetTcpBinding : CustomBinding
{
private readonly TcpTransportBindingElement _transportBindingElement;
private readonly BinaryMessageEncodingBindingElement _encodingBindingElement;
// private readonly SecurityBindingElement _securityBindingElement;
/// <summary>
/// Initializes a new instance of the <see cref="SamlNetTcpBinding"/> class.
/// </summary>
public SamlNetTcpBinding()
{
IssuerAddress = "http://www.myIssuerAddress.com/";
_transportBindingElement = new TcpTransportBindingElement()
{
TransferMode = TransferMode.Streamed, PortSharingEnabled = true
};
_encodingBindingElement = new BinaryMessageEncodingBindingElement();
}
/// <summary> …Run Code Online (Sandbox Code Playgroud) 是否可以将用户从使用SAML身份验证的应用程序中注销,但是让他们登录到IDP以便他们可以继续访问其他服务提供商?
我希望能够将用户从应用程序中注销,并在他们返回应用程序时对其进行身份验证,而不将其从IDP中注销(即我不想使用单点注销).这可能与SAML有关吗?
背景:我公司作为IDP的客户担任服务提供商.我们使用OpenAM,但我们的客户使用ADFS或Shibboleth.我们交换元数据文件以建立联合,而不是URL.客户问我们为什么需要AuthnContext类模式(特别是PasswordProtectedTransport),不仅我们不知道为什么,我们不知道如何更改它或者意味着什么.
问题:在SAML2断言中对AuthnContextClassRef使用"PasswordProtectedTransport"与"unspecified"之间的功能区别是什么?
我们目前在所有客户中使用PasswordProtectedTransport,但我公司没有人能告诉我为什么要求这样做.如果我们删除它,联合会停止使用SAM错误和SAML跟踪中的"NoAuthnContext".我们也不明白这一点,因为我从saml文档中了解到,具有模式的模式对于身份验证是可选的.即便如此,我也没有看到任何使用"未指明"的含义的解释.
我无法在任何地方找到关于这个主题的任何详尽的解释或讨论,并希望有人可以为我详细说明,因为我正在努力寻找这个问题.
我们有一个声明感知应用程序,并使用ADFS服务器来验证来自我们合作伙伴网络的用户.拥有自己的ADFS服务器的客户没有问题.他们的ADFS服务器以SAML 1.0格式向我们发送令牌,一切都很顺利.我们有一个客户端向我们的ADFS服务器发送未经请求的SAML 2.0帖子.信任关系有效,用户进入我们的系统,但没有任何索赔通过.我们得到的就是这个(来自我们的应用程序日志文件):
9/1/2015 7:35:44 PM: Claim type = http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod, value = urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
9/1/2015 7:35:44 PM: Claim type = http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationinstant, value = 2015-09-01T23:35:40.194Z
Run Code Online (Sandbox Code Playgroud)
比较SAML令牌,格式是完全不同的.例如,SAML 1中有一个自定义声明,如下所示:
<saml:Attribute xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims" AttributeName="customerguid" AttributeNamespace="http://schemas.xmlsoap.org/ws/2005/05/identity/claims" a:OriginalIssuer="http://Absolut.vis-intel.net/adfs/services/trust">
<saml:AttributeValue>8835cf46-07a6-45f7-82d9-978905b5911f</saml:AttributeValue>
</saml:Attribute>
Run Code Online (Sandbox Code Playgroud)
但他们是这样的:
<saml2:Attribute Name="CustomerGuid">
<saml2:AttributeValue>b4f3dd70-ef42-4596-be76-3e3fa077d06e</saml2:AttributeValue>
</saml2:Attribute>
Run Code Online (Sandbox Code Playgroud)
我们想也许我们需要对索赔规则做些什么.他们看起来像这样:
c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/customerguid"]
=> issue(claim = c);
Run Code Online (Sandbox Code Playgroud)
我们添加了自定义声明类型,并尝试更改声明规则以使用它们来尝试抓取CustomerGuid,但这没有任何区别:
c:[Type == "CustomerGuid"] => issue(claim = c);
Run Code Online (Sandbox Code Playgroud)
寻找有关如何使这项工作的任何指针.
我正在构建一个SAML 2.0 AuthNRequest.我设法使用OpenSaml添加签名信息,但我找不到使用库添加<ds:SignatureValue/>和<ds:DigestValue/>VALUES的方法.这是代码:
public String buildAuthnRequest() {
QName qname = new javax.xml.namespace.QName(SSO_METDATA_QNAME);
IssuerBuilder issuerBuilder = new IssuerBuilder();
Issuer issuer = issuerBuilder.buildObject("urn:oasis:names:tc:SAML:2.0:assertion", "Issuer", "samlp");
issuer.setValue(issuer.getValue());
DateTime issueInstant = new DateTime();
AuthnRequestBuilder authnRequestBuilder = new AuthnRequestBuilder();
AuthnRequest authnRequest = authnRequestBuilder.buildObject("urn:oasis:names:tc:SAML:2.0:protocol","AuthnRequest", "samlp");
authnRequest.setAssertionConsumerServiceURL("http://test.com");
// Signature sign = null;
// sign.setSignatureAlgorithm("SHA256");
// Credential credential = null;
// sign.setSigningCredential(credential);
// authnRequest.setSignature(sign);
NameIDPolicyBuilder policy = new NameIDPolicyBuilder();
NameIDPolicy pol = policy.buildObject();
RequestedAuthnContextBuilder contextBuild = new RequestedAuthnContextBuilder();
RequestedAuthnContext context = contextBuild.buildObject();
authnRequest.setRequestedAuthnContext(context);
authnRequest.setNameIDPolicy(pol); …Run Code Online (Sandbox Code Playgroud)