我尝试使用curl 请求SAML 令牌。
这是我使用curl传递的内容:
curl https://server.com/adfs/services/trust/13/usernamemixed --data @request.txt -H "Content-Type:application/soap+xml" --verbose -o "output.txt"
Run Code Online (Sandbox Code Playgroud)
这是我的 request.txt 文件
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
<a:Action s:mustUnderstand="1">
http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue
</a:Action>
<a:To s:mustUnderstand="1">https://server.com/adfs/services/trust/13/UsernameMixed</a:To>
<o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" >
<o:UsernameToken u:Id="uuid-6a13a244-dac6-42c1-84c5-cbb345b0c4c4-1">
<o:Username>user</o:Username>
<o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">pass</o:Password>
</o:UsernameToken>
</o:Security>
</s:Header>
<s:Body>
<trust:RequestSecurityToken xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
<wsp:AppliesTo xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<a:EndpointReference>
<a:Address>https://server.com</a:Address>
</a:EndpointReference>
</wsp:AppliesTo>
<trust:KeyType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/Bearer</trust:KeyType>
<trust:RequestType>
http://docs.oasis-open.org/ws-sx/ws-trust/200512/Issue
</trust:RequestType>
<trust:TokenType>urn:oasis:names:tc:SAML:2.0:assertion</trust:TokenType>
</trust:RequestSecurityToken>
</s:Body>
</s:Envelope>
Run Code Online (Sandbox Code Playgroud)
我收到的响应是 MSIS3127:指定的请求失败。
我可以检查一下什么想法吗?谢谢!
在过去的一周里,我对将单点登录与SAML 2.0. 找了很多好文章,详细了解了SSO的流程,但是在我们的C#.Net Framework 4.5解决方案中实现的时候遇到了问题。
让我描述一下我对这个过程的理解以及我应该如何应用它:
用户访问我们的软件,即服务提供商 (SP)。我们正在根据客户的需求调整不同的实例。
输入电子邮件地址后,他应该被重定向到我们的身份提供者 (IdP)。在这一点上,我相信我应该发送一个身份验证令牌来检查用户是否尚未登录 IdP。如果用户是,我想将用户登录到我们的系统。如果他不是,他将登录他们的 IdP。
SAML响应令牌发送回我们的网站 URL。到目前为止,我还没有找到关于生成 SAML 请求的实际过程或SAML在C#代码中解密我们的令牌的方法的任何好的资源。
对于测试,我们使用 ADFS 2.0 作为 IdP,我们SAML从中获取响应。当我们处理响应时,我们希望将数据库中的信息与响应中的电子邮件进行比较,以在让用户进入系统之前验证用户详细信息。
我能找到的例子要么已经过时,要么没有给出详细的解释。如果有人能够通过提供一些实施示例或我尚未设法找到的良好且最新的资源来为我照亮它。
应用程序通过 Open ID Connect 协议与AWS Cognito 进行通信,AWS Cognito连接到ADFS,通过 SAML 进行通信。Cognito 本质上是“代理”ADFS 服务器。
ADFS 拥有应用程序所需的组映射,我想将这些组作为实际的 Cognito 组导入 Cognito - 然后应用程序将从cognito:groupsCognito 提供的 ID 令牌中读取该组。
在 AWS Cognito 用户池设置中,我没有看到将 ADFS 组映射到 Cognito 组的方法——我必须绝对依赖我的用户池的自定义属性,我可以映射到 ADFS 属性,还是我错过了一些允许 Cognito 动态创建新组并自动将用户分配到 Cognito 中的组的配置?
编辑:澄清一下,是否可以设置 Cognito 在导入用户时添加/创建组(不是作为自定义属性,而是实际可管理的认知组)?
在我开始之前,我们的客户必须通过AFDS连接才能继续使用CRM 2011.所以我们谈论的是"IFD"环境.
我在使用"CRM 2011 Outlook Client"和"Window.Open(...)" - JS功能时遇到问题.当他们点击CRM 2011中的按钮时,ASPX页面会启动,并在电子邮件中添加附件.然后它成功创建一个联系人,然后它应该重定向到该"联系人"页面.但每次我重定向到"CRM 2011"页面时,用户都会提示他的凭据.这是因为"Window.Open(...)"在新的"浏览器"屏幕中打开屏幕并且身份验证丢失(因为我们来自Outlook客户端).
使用基于"Web"的CRM 2011时,上述方案工作正常,因为您首先需要通过ADFS登录.
有没有人遇到上述问题,并有一个很好的解决方案?
我希望你们能帮助我.在我身边,如果我找到任何解决方案,我会回到这里!
亲切的问候,弗雷德里克
我正在尝试设置示例:Web应用程序通过thinktecture身份服务器2.0使用活动目录登录.
Active Directory和Thinktecture IdentityServer都安装在同一台计算机上.
我将Thinktecture IdentityServer配置为使用Active Directory联合身份验证服务作为身份提供程序.并且Thintecture IdentityServer成为回复方信任.
当我从Web应用程序请求登录操作时,ADFS上记录了两个错误:
因为我没有足够的10个声誉,我将地址" https:// xxxx/idsrv / "掩盖到idsrvAddress
第一:事件ID:184
收到了由密钥"idsrvAddress"标识的依赖方的令牌请求,但由于该密钥未标识任何已知的依赖方信任,因此无法满足该请求.密钥:idsrvAddress
此请求失败.
用户操作如果此键表示应为其颁发令牌的URI,请验证其前缀是否与AD FS配置数据库中配置的信赖方信任相匹配.
第二:事件ID:364
联合被动请求期间遇到错误.
附加数据
异常详细信息:Microsoft.IdentityServer.Web.InvalidScopeException:MSIS7007:未指定或不支持请求的依赖方信任'idsrvAddress'.如果指定了依赖方信任,则您可能无权访问信任依赖方.请联系您的管理员了解详情
请帮帮我,我该做什么!
我是ADFS的新手。其实我不知道什么是主动或被动联盟,也不知道它们之间的区别,有人可以帮我吗?
提前致谢 !!!...
我正在尝试为Microsoft Dynamics CRM 2011("xRM")Web服务(我理解为基于WCF 4)创建Apache CXF(2.7.5)客户端,其中CRM处于声明模式,因此WSDL这个Web服务指向STS(在我的情况下是AD FS 2.0).
我的主要问题:是否有任何教程,建议,博客文章可以帮助我(描述如何发送声明,或如何避免它们,而是使用Windows身份验证)?
以下是我到目前为止所做的事情的描述.
我已经拥有相同Web服务的工作代码,当CRM处于Windows身份验证模式时,该服务可以正常运行.该代码基于Groovy Tom博客上的"CXF和MS CRM 2011".
为了支持声明模式,我还需要包含org.apache.cxf:cxf-rt-ws-mex,以便CXF可以解析xRM WSDL.然后我需要让CXF内置的STS客户端使用SOAP 1.2:
client.getRequestContext().put("ws-security.sts.client-soap12-binding", "true");
Run Code Online (Sandbox Code Playgroud)
避免来自AD FS 2.0的错误500.(显然AD FS 2.0期望使用SOAP 1.2调用/ adfs/services/trust/mex端点,而CXF默认使用SOAP 1.1.我必须从AD FS的WCF跟踪中找到它,
System.ServiceModel.ProtocolException:Content Type text/xml; charset = UTF-8被发送到期望application/soap + xml的服务; 字符集= UTF-8.客户端和服务绑定可能不匹配.
当Apache CXF使用SOAP 1.1时.)
然后还有另一个问题:AD FS的/ adfs/services/trust/mex端点返回的WSDL似乎不完整,因为它包含
<wsdl:types>
<xsd:schema
targetNamespace="http://schemas.microsoft.com/ws/2008/06/identity/securitytokenservice/Imports">
<xsd:import namespace="http://schemas.microsoft.com/Message" />
<xsd:import namespace="http://schemas.xmlsoap.org/ws/2005/02/trust" />
<xsd:import namespace="http://docs.oasis-open.org/ws-sx/ws-trust/200512" />
</xsd:schema>
</wsdl:types>
Run Code Online (Sandbox Code Playgroud)
所以没有import一个人有schemaLocation.这让CXF抱怨道
org.apache.cxf.wsdl11.WSDLRuntimeException:部件请求定义为元素{ http://docs.oasis-open.org/ws-sx/ws-trust/200512 …
我正在研究使用Microsoft的OWIN WS-Federation包进行ADFS集成,但我发现很难从可用的文档中确定某些参数的用途.
我们有三个环境,它们都在内部托管在与我们尝试进行身份验证的ADFS系统完全不同的系统上.
根据我的研究,我对身份验证过程的工作方式有了基本的了解,但我可以对这些关键字在依赖方信任配置过程中的位置,它们的用途以及它们之间的关系进行一些说明,以便更好地沟通我们需要从ADFS系统的(第三方)所有者进行设置.
我知道wtrealm参数对应于RPT中的应用程序ID,但WS-Federation URL在哪里?这是客户端将重定向到进行身份验证的URL吗?在这种情况下,我是否需要为每个环境(开发,测试,生产)单独的RPT?多个应用ID的用例是什么?
任何关于此的光线都非常有用.
如果我使用一些错误或模糊的术语,我会道歉.如果我这样做,请纠正我.
我有一个相当新的ASP.NET 4.6 MVC 5应用程序,它通过WsFederation和Microsoft ADFS服务器使用声明身份验证.这意味着我不公开LogIn操作控制器,也不管理webapp中的用户和密码.当用户导航到我的站点时,如果他们未经过身份验证,则会将他们重定向到他们登录的ADFS服务器,然后重定向回来.
我需要存储一些提交的离线使用声明 - 他们的显示名称和电子邮件地址.我的想法是利用创建该集合os AspNet*表的ASP.NET Identity包.据我了解,它旨在支持本地用户(使用密码)和外部用户(使用外部密码管理)来自Facebook,Google,Github等提供商.我是否认为ADFS属于该类别?
成功验证后重定向回我的网站,我究竟在哪里放置检查用户是否在AspNet*表中输入的逻辑?cookie验证和WsFederation的配置和连线目前在该Startup.ConfigureAuth(IAppBuilder app)方法中发生.我想我应该使用从继承的类IdentityUser和IdentityDbContext<ApplicationUser>然后调用方法UserManager或UserStore.
我花了几个小时搜索如何将外部登录与应用程序"配置文件"表关联起来的示例无济于事.我很可能刚刚使用了错误的术语.到目前为止,我发现的每个示例都涉及模拟或修改登录和注册操作方法附带的默认VS模板,或者只是连接FB和Google.没有任何东西可以处理ADFS 和/或从外部源绑定到配置文件表.
任何代码示例或至少链接到文章/资源将不胜感激.
asp.net-mvc adfs claims-based-identity ws-federation asp.net-identity
我有一个网站和API,均由我们公司的ADFS支持的令牌服务保护。我需要使用C#控制台应用程序在API上命中一个端点。我发现缺乏使用C#代码访问受STS保护的网站的资源。它使用ADFS 3.0。
当我使用HttpClient(或类似方法)点击一个端点时,会收到HTML表单。
我的代码:
Uri baseAddress = new Uri("http://localhost:64022");
using (HttpClient client = new HttpClient() { BaseAddress = baseAddress })
{
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "#");
HttpResponseMessage response = client.SendAsync(request).Result;
var encoding = ASCIIEncoding.ASCII;
using (var reader = new System.IO.StreamReader(response.Content.ReadAsStreamAsync().Result, encoding))
{
string responseText = reader.ReadToEnd();
}
}
Run Code Online (Sandbox Code Playgroud)
我在我的应用程序的web.config文件中具有的设置是:
<system.identityModel.services>
<federationConfiguration>
<cookieHandler requireSsl="false" persistentSessionLifetime="1.0:0:0" />
<wsFederation persistentCookiesOnPassiveRedirects="true" passiveRedirectEnabled="true" issuer="https://sts.company.com/adfs/ls/" realm="http://myapp.company.com/" requireHttps="false" />
</federationConfiguration>
</system.identityModel.services>
<system.identityModel>
<identityConfiguration>
<audienceUris>
<add value="http://myapp.company.com/" />
</audienceUris>
<issuerNameRegistry>
<trustedIssuers>
<add thumbprint="0000000000000000000000000000000000000000" name="https://sts.company.com/adfs/services/trust" /> …Run Code Online (Sandbox Code Playgroud)