问题标签 [adfs3.0]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
596 浏览

windows2012 - Win 2012 上的 ADFS 3.0 生成 1 小时过期的 SAML 断言

我正在使用 Win 2012 并在其上安装了 ADFS 3.0。到目前为止,服务器配置为向单一依赖方(我的测试应用程序)生成 SAML 2.0 断言。

我在依赖方方面收到 Assertions is expired 错误,因此我使用 SAML Tracer 检查生成的断言,发现从 Win 2012 服务器本身生成的断言已从当前服务器时间过期 1 小时。

SAML 断言的部分: NotBefore="2016-05-05T12:19:15.789Z" NotOnOrAfter="2016-05-05T13:19:15.789Z"

那时我的服务器时间是系统时钟的下午 2.29。

知道是什么导致了这个时差以及如何解决它吗?

0 投票
2 回答
665 浏览

spring - Tomcat/ADFS 集成的 Spring SAML 异常

我下载了 Sprind SAML 示例应用程序,它在我的本地 tomcat 中运行良好(针对 SSOCircle)。然后我添加了一个新的SP指向我们公司的ADFS。我遇到了几个问题并一一解决。现在我能够发送请求并获得有效的 saml 响应和断言令牌。但是我收到以下错误消息:

我确实遵循了一些旧线程(感谢 Vladimír Schäfer)并将公钥导入 samlKeystore.jks,但仍然遇到相同的错误。任何帮助表示赞赏。

错误详情:

  • 规范化的 SignedInfo:
  • QCZQsG03PFbYdFMyX2UaO2rXSXA=
  • 验证 1 参考文献
  • 我没有被要求遵循嵌套清单
  • setElement("ds:Reference", "")
  • setElement("ds:Transforms", "")
  • 请求 URI .w3.org/2000/09/xmldsig#sha1
  • 我被要求创建一个 ResourceResolver 并得到 0
  • 通过类 org.apache.xml.security.utils.resolver.ResourceResolver 检查可解析性
  • 状态我可以解决参考:“#_28691d8f-b0ab-4c19-ad32-4c60fada6e90”
  • 尝试捕获 ID 为 _28691d8f-b0ab-4c19-ad32-4c60fada6e90 且 Element 为 [Assertion: null] 的元素
  • setElement("ds:变换", "")
  • 执行第 (0) 个 .w3.org/2000/09/xmldsig#envelope-signature 转换
  • setElement("ds:变换", "")
  • 预消化输入:
  • http://adfs.mycompany.com/adfs/services/trust robertRYYGWLoginrobertRurn:federation:authentication:windows
  • URI“#_28691d8f-b0ab-4c19-ad32-4c60fada6e90”验证成功
  • 参考有类型
  • 使用提供的凭证中的密钥验证签名
  • 使用候选凭证的签名验证成功
  • 使用 KeyInfo 派生凭证成功验证签名
  • 尝试建立对 KeyInfo 派生凭证的信任
  • 无法根据受信任的密钥验证不受信任的凭据
  • 无法根据受信任的密钥验证不受信任的凭据
  • 无法根据受信任的密钥验证不受信任的凭据
  • 未能建立对 KeyInfo 派生凭证的信任
  • 无法使用任何 KeyInfo 派生凭据验证签名和/或建立信任
  • 尝试使用受信任的凭据验证签名
  • 尝试使用提供的凭证中的密钥验证签名
  • 创建 XMLSignature 对象
  • 使用签名算法 URI 验证签名:.w3.org/2000/09/xmldsig#rsa-sha1
  • 验证凭证密钥算法“RSA”,密钥实例类“sun.security.rsa.RSAPublicKeyImpl”
  • 签名方法URI = .w3.org/2000/09/xmldsig#rsa-sha1
  • jceSigAlgorithm = SHA1withRSA
  • jceSigProvider = SunRsaSign
  • PublicKey = Sun RSA 公钥,2048 位模数:23431177975394 公共指数:65537
  • 规范化的 SignedInfo:
  • QCZQsG03PFbYdFMyX2UaO2rXSXA=
  • 签名认证失败。
  • 签名未针对凭证的密钥进行验证
  • 使用候选验证凭据的签名验证失败 org.opensaml.xml.validation.ValidationException:签名未针对 org.opensaml.xml.signature.SignatureValidator.validate(SignatureValidator.java:79) 在 org.opensaml.xml 的凭据密钥进行验证.signature.impl.BaseSignatureTrustEngine.verifySignature(BaseSignatureTrustEngine.java:142) 在 org.opensaml.xml.signature.impl.ExplicitKeySignatureTrustEngine.validate(ExplicitKeySignatureTrustEngine.java:110) 在 org.opensaml.xml.signature.impl.ExplicitKeySignatureTrustEngine.validate (ExplicitKeySignatureTrustEngine.java:49) 在 org.springframework.security.saml.websso.AbstractProfileBase.verifySignature(AbstractProfileBase.java:267) 在 org.springframework.security.saml.websso.WebSSOProfileConsumerImpl.verifyAssertionSignature(WebSSOProfileConsumerImpl.java:419)组织。springframework.security.saml.websso.WebSSOProfileConsumerImpl.verifyAssertion(WebSSOProfileConsumerImpl.java:292) 在 org.springframework.security.saml.websso.WebSSOProfileConsumerImpl.processAuthenticationResponse(WebSSOProfileConsumerImpl.java:214) 在 org.springframework.security.saml.SAMLAuthenticationProvider。在 org.springframework.security.saml.SAMLProcessingFilter.attemptAuthentication(SAMLProcessingFilter.java:84) 的 org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:156) 进行身份验证(SAMLAuthenticationProvider.java:82) .security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:195) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework。security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:166) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy. java:342) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework 的 org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) .security.saml.metadata.MetadataGeneratorFilter.doFilter(MetadataGeneratorFilter.java:87) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.FilterChainProxy.doFilterInternal (FilterChainProxy.java:192) 在 org.springframework.security.web。FilterChainProxy.doFilter(FilterChainProxy.java:160) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) at org .apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve .java:220) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:614) 在 org.apache.catalina.org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)。 core.StandardHostValve.invoke(StandardHostValve.java:170) 在 org.apache.catalina.valves.ErrorReportValve。在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在 org.apache.catalina.invoke(AccessLogValve.java:956) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) 调用(ErrorReportValve.java:103) .catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java :625) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent。 ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:724)103) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在 org.apache.catalina.connector.CoyoteAdapter .service(CoyoteAdapter.java:423) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) at org. apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run( ThreadPoolExecutor.java:615) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:724)103) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在 org.apache.catalina.connector.CoyoteAdapter .service(CoyoteAdapter.java:423) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) at org. apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run( ThreadPoolExecutor.java:615) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:724)在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 调用(AccessLogValve.java:956) .coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run (JIoEndpoint.java:318) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 org.apache.tomcat。 util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:724)在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 调用(AccessLogValve.java:956) .coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run (JIoEndpoint.java:318) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 org.apache.tomcat。 util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:724)调用(StandardEngineValve.java:116)在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)在 org.apache .coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor .java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java。 lang.Thread.run(Thread.java:724)调用(StandardEngineValve.java:116)在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)在 org.apache .coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor .java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java。 lang.Thread.run(Thread.java:724)进程(AbstractHttp11Processor.java:1079)在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable .run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:724)进程(AbstractHttp11Processor.java:1079)在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable .run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:724)在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:724) 运行(ThreadPoolExecutor.java:615)在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:724) 运行(ThreadPoolExecutor.java:615)
  • 尝试使用提供的凭证中的密钥验证签名
  • 创建 XMLSignature 对象
  • 使用签名算法 URI 验证签名:.w3.org/2000/09/xmldsig#rsa-sha1
  • 验证凭证密钥算法“RSA”,密钥实例类“sun.security.rsa.RSAPublicKeyImpl”
  • 签名方法URI = .w3.org/2000/09/xmldsig#rsa-sha1
  • jceSigAlgorithm = SHA1withRSA
  • jceSigProvider = SunRsaSign
  • PublicKey = Sun RSA 公钥,2048 位模数:2179836566179054962 公共指数:65537
  • 规范化的 SignedInfo:
  • QCZQsG03PFbYdFMyX2UaO2rXSXA=
  • 签名认证失败。
  • 签名未针对凭证的密钥进行验证
  • 使用候选验证凭据的签名验证失败 org.opensaml.xml.validation.ValidationException:签名未针对 org.opensaml.xml.signature.SignatureValidator.validate(SignatureValidator.java:79) 在 org.opensaml.xml 的凭据密钥进行验证.signature.impl.BaseSignatureTrustEngine.verifySignature(BaseSignatureTrustEngine.java:142) 在 org.opensaml.xml.signature.impl.ExplicitKeySignatureTrustEngine.validate(ExplicitKeySignatureTrustEngine.java:110) 在 org.opensaml.xml.signature.impl.ExplicitKeySignatureTrustEngine.validate (ExplicitKeySignatureTrustEngine.java:49)
0 投票
2 回答
470 浏览

java - 如何在 Java 程序中从 IdP-ADFS 获取用户?

我们有一个基于 Web 的应用程序,它与 IdP 对话,并且 IdP 使用带有 SAML 的 ADFS。我们在 IdP 和我们的服务器之间使用 Spring Security 框架,现在,我们能够在 IdP 验证用户并将用户名发送到我们的应用程序服务器(无需重新验证)。

要分配不同的角色,我们需要应用程序服务器上的所有用户(我们在应用程序级别分配权限)。

所以我的问题是如何将所有用户从 ADFS 提取到我的应用程序服务器中?

0 投票
1 回答
4549 浏览

c# - ID3242:无法对安全令牌进行身份验证或授权

目前我正在开发一个项目,我的应用程序必须使用 ADFS 验证才能登录。

我找到了一些从 ADFS 获取令牌的代码,但它一直给我上面的错误,而没有关于错误的任何好的描述。

这是我使用的代码:

错误发生在带有错误注释的行上。

有人有线索吗?

0 投票
1 回答
97 浏览

asp.net - ADFS 登录间歇性成功

我正在尝试将 ADFS 身份验证合并到我的 MVC 应用程序中(使用示例)。我不是系统管理员,对实现这一点的那方面所做的工作知之甚少。它在本地完美运行,但有时仅在我们的暂存环境中运行。当它失败时,url的编码部分会更改几次,然后我看到

“发生错误。有关详细信息,请联系您的管理员。”

ADFS 服务器事件日志中的实际错误是

“同一个客户端浏览器会话在最后 'y' 秒内发出了 'x' 个请求。”

我看过几篇关于斜杠和其他可能原因的帖子。这些我都试过了。我真正希望的是一个故障排除步骤列表,以找出发生这种情况的原因。我们的暂存环境有两个 Web 服务器,但两者的配置是相同的。

0 投票
2 回答
658 浏览

asp.net-mvc - Rotativa + WkhtmltoPDF + ADFS 不呈现 PDF

我有一个 ASP.net MVC 应用程序,在引入 ADFS 身份验证后,我无法将 MVC 视图呈现为 PDF。

早些时候,该应用程序使用 Rotativa(使用 WkhtmltoPDF 库)进行表单身份验证和 PDF 渲染就像一个魅力。在引入 ADFS 之后,它就无法工作了。

我得到的是一个标题为“登录”的空白 PDF,页面/PDF 本身没有任何元素。

在此处输入图像描述

因为它非常表明它试图连接到某个地方,所以我相信问题出在 WkhtmltoPDF 的身份验证参数的某个地方,即我可能必须添加一些额外的参数才能支持 ADFS,但我不确定哪些参数。我已经尝试过使用--username--password参数,但它们没有帮助。

问题是:如何使它(再次)工作?

0 投票
0 回答
561 浏览

angularjs - AngularJS 与 Web Api、登录 OWIN 和 ADFS

场景:

我有一个 ADFS(本地)服务器,我想要的是针对它验证一个 angularJS 应用程序。对于我正在寻找的东西,我必须使用 Authorization_Code Flow。因此,使用satellizer和 OAuth2 流,我尝试进行身份验证,ADFS 使用授权代码响应,该部分是好的,当 ADFS 响应时自动将代码重定向到http://localhost/token我的 web api 在哪里。但我无法获取令牌,因为一旦调用 /token,我不知道如何从 ADFS 调用获取它。

我的 OWIN 启动:

卫星发射器配置:

这只是 OAuthAuthorizationServerProvider 的想法:

如果有人可以帮助指导如何实现令牌授予。我已经有了 angular 的 httpInterceptor,我认为app.UseActiveDirectoryFederationServicesBearerAuthentication是 Web Api 验证承载令牌的方式。

谢谢!

0 投票
1 回答
96 浏览

saml - SaaS 提供商的 ADFS 3.0 IdP 启动登录

具有多租户用户的自定义 SaaS 应用程序。需要在受 ADFS 3.0 保护的 sass 应用程序中对用户进行身份验证,不希望有 homerelm 发现。不确定这是否应该是智能链接?如何创建一个身份验证流程,让用户单击一个仅在已从 IdP 进行身份验证时才接受他们的链接?

0 投票
1 回答
3067 浏览

oauth - 访问 Dynamics CRM 2016 Web API 时出现 401

我正在努力从控制台应用程序访问Dynamics 2016 CRM OData Web API 。

我们安装了Dynamics CRM 2016,配置了基于声明的身份验证,并使用 AD FS v3.0。

我的理解是,控制台应用程序(或 Web 应用程序)应该能够使用 Windows 集成身份验证(即 NTML 或 Kerberos)访问 Web API,而无需任何特殊处理……或者 OAuth 流程在启用时应该可以工作。

对于访问动态“页面”的普通用户,身份验证工作正常(重定向到 AD FS 登录页面),但访问 OData API 似乎不起作用(例如:https ://crm.domain.org/api/发现/v8.0/):

  • 在浏览器中,我收到 Windows 登录提示并输入有效凭据总是会导致 HTTP 401 未经授权的错误
  • 在浏览器中,如果我在登录页面后导航到 Web API url ,那么我可以访问 Web API(即必须设置一些 cookie,并且我已经被隐式授权)
  • 从代码中,使用具有特定有效凭据(或当前凭据)的 HttpClient,我也得到了 401

我尝试过的事情:

  • 如果我完全禁用基于声明的身份验证,HttpClient 工作正常,我可以访问 OData API
  • 如果我启用基于声明的身份验证,并通过 PowerShell激活 OAuthAdd-PSSnapin Microsoft.Crm.PowerShell ; $ClaimsSettings = Get-CrmSetting -SettingType OAuthClaimsSettings; $ClaimsSettings.Enabled = $true ; Set-CrmSetting -Setting $ClaimsSettings ;

    Windows 集成身份验证仍然不起作用,但现在可以使用 Bearer 身份验证。我可以使用此代码段来检索 OAuth 端点以生成令牌,并AuthenticationContext.AcquireTokenAsync用于发出令牌,然后将其传递到AuthorizationHTTP 标头中……但是,无论如何,我都会收到此错误:

    Bearer error=invalid_token, error_description =Error during token validation!, authorization_uri=https://our.adfs.domain.org/adfs/oauth2/authorize, resource_id=https://crm.domain.org/

我错过了什么吗?这可能是配置问题吗?

0 投票
1 回答
147 浏览

token - 使用端点 IP 或机器名称与 ADFS 通信

我能够与 ADFS 服务器通信并成功验证用户身份。我有一个关于端点地址的问题。

我的问题:

与 ADFS 通信时,我可以在地址处提供域名吗?

当我尝试进入域名通道时无法创建。我想知道我的服务器 DNS 中是否缺少任何设置。