我们将ADFS用于内部应用程序 - 用户在访问我们的应用程序时,基本上都可以透明地登录.但是,如果用户将页面打开超过一个小时然后尝试在该页面上执行某些操作(除了导航到另一个页面),则会出现错误:
此页面正在访问不受其控制的信息.这带来了安全风险.你想继续吗?
看起来该页面正在尝试将该请求重定向到ADFS服务器,并且浏览器正在阻止该请求.
我的问题是:我如何捕获这种情况并让用户到ADFS服务器重新进行身份验证?
我没有幸运在谷歌上发现任何关于此的事情.
我们有一个在Caucho Resin上运行的网站.该站点的绝大部分是JSP/Java.我们在网站上拥有自己的自定义身份验证,这意味着我们没有使用任何第三方身份验证框架.我们托管网站,而不是我们的客户.
我们的大客户希望让他们的用户使用他们的活动目录凭据登录我们的站点.为此,我假设我将使用SAML与ADFS对话,如果错误,请纠正我.
所以我的问题是我如何用Java做到这一点?据我所知,OpenSAML听起来并不能完成所有事情,如果我想要更多,那么我需要使用Shibboleth.还有其他选择吗?如果我想要的是用户能够登录,我最好的选择是什么?
任何信息都会有帮助.谢谢.
编辑:我刚刚发现另一种选择是OAuth.优点?缺点?
我正在查看SAML IdP的元数据,它列出了三个唯一的证书-2个签名和1个加密。
...
<md:KeyDescriptor use="signing">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:KeyDescriptor use="signing">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:KeyDescriptor use="encryption">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
...Run Code Online (Sandbox Code Playgroud)
我知道为什么它列出了签名和加密证书,但是如何确定在服务提供商中使用哪个签名证书?为什么根本没有两个签名证书?
提前致谢!
我们目前正在AWS上使用完整的无服务器堆栈构建Web应用程序.到目前为止,我们使用AWS Lambda,AWS DynamoDB和Cognito用户池非常成功.此应用程序旨在成为企业应用程序,我的一个客户希望能够使用其当前的Active Directory凭据记录所有用户.我过去曾在其他应用程序中使用AD FS,但它总是被证明是一个让它运行起来的黑客攻击.
现在,我想向客户发送有关如何配置其AD FS信赖方信任以对我的应用程序进行身份验证的说明.
我已经读过,最好的方法是创建一个链接到Cognito用户池的Cognito Identity Provider.在用户池中,您应该创建SAML提供程序并从AD FS服务器上载metadata.xml.
我已经设置了一个带有AD FS的实验室服务器,我可以使用它.现在我不确定在依赖方信任设置或Cognito设置方面我做错了什么.我已经在这里工作了很长时间,并阅读了我能找到的每篇博客文章.如果有人可以帮助我或指出我正确的方向,将不胜感激.
我已经为asp.net 4.0应用程序实现了ADFS身份验证.我已经使用webfarm配置在生产环境中托管了应用程序.该网站运行良好,所有图像都在IE8浏览器中正确呈现.但是,当我尝试在Safari浏览器中浏览应用程序时,网站无法正常工作,图像也无法正常呈现.
通过使用Fiddler我发现有时候图像没有正确呈现,它带有以下错误:
Exception information:
Exception type: XmlException
Exception message: Unexpected end of file. Following elements are not closed: Cookie, SecurityContextToken. Line 1, position 2998.
Thread information:
Thread ID: 12
Thread account name: CT\acmeweb
Is impersonating: False
Stack trace: at System.Xml.XmlExceptionHelper.ThrowXmlException(XmlDictionaryReader reader, String res, String arg1, String arg2, String arg3)
at System.Xml.XmlExceptionHelper.ThrowUnexpectedEndOfFile(XmlDictionaryReader reader)
at System.Xml.XmlBaseReader.MoveToEndOfFile()
at System.Xml.XmlUTF8TextReader.Read()
at System.Xml.XmlDictionaryReader.ReadContentAsChars(Char[] chars, Int32 offset, Int32 count)
at System.Xml.XmlBaseReader.ReadBytes(Encoding encoding, Int32 byteBlock, Int32 charBlock, Byte[] buffer, Int32 offset, Int32 byteCount, Boolean readContent)
at …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过执行以下操作来设置一个简单的脚本,该脚本使用 cURL 来监视我们的 SharePoint Online 网站:-
第一步,我使用 cURL 将以下 POST 提交到我们的 ADFS 端点:
curl https://sts.contoso.com/adfs/services/trust/13/UsernameMixed --data @req.txt -H "Content-Type: application/soap+xml" -o out.txt
Run Code Online (Sandbox Code Playgroud)
我发送的 SOAP 信封请求以下内容(这只是请求的摘录):
<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://login.microsoftonline.com/extSTS.srf</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:1.0:assertion</trust:TokenType>
</trust:RequestSecurityToken>
Run Code Online (Sandbox Code Playgroud)
我从中得到的响应包含一个 X509 证书、一个摘要和一个签名,我不知道该怎么做。我可以在网上看到的所有指南都会导致从这个初始请求返回一个“BinarySecurityToken”,您可以提取它并发布到 Sharepoint.com 以获得必要的 cookie 以获取访问权限。诚然,他们都在使用 MicrosoftOnline STS(云凭据),那么这是否只是 Microsoft STS 可以实现但 ADFS 服务器不能实现的东西?
或者我的方法有什么明显的错误?
任何帮助将不胜感激。
干杯,
邓肯
在我的MVC站点上,如果我检测到正在使用ADFS帐户,我会重定向到ADFS登录页面.用户输入其ADFS凭据后,ADFS站点将WsFederationMessage回发到我的站点.如何验证作为其中一部分呈现给我的站点的ADFS令牌WsFederationMessage?
在AuthenticationHandler中间件类中,我有以下调用该ValidateToken方法的相关代码:
IFormCollection form = await Request.ReadFormAsync();
WsFederationMessage wsFederationMessage = new WsFederationMessage(form);
if (!wsFederationMessage.IsSignInMessage)
{
Request.Body.Seek(0, SeekOrigin.Begin);
return null;
}
var token = wsFederationMessage.GetToken();
if (wsFederationMessage.Wresult != null && Options.SecurityTokenHandlers.CanReadToken(token))
{
SecurityToken validatedToken;
ClaimsPrincipal principal = Options.SecurityTokenHandlers.ValidateToken(token, Options.TokenValidationParameters, out validatedToken);
...
}
Run Code Online (Sandbox Code Playgroud)
我试图打电话时收到此错误ValidateToken:
描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.
异常详细信息:System.IdentityModel.SignatureVerificationFailedException:ID4037:无法从以下安全密钥标识符'SecurityKeyIdentifier解析验证签名所需的密钥(
IsReadOnly = False,Count = 1,Clause [0] = X509RawDataKeyIdentifierClause(RawData = [已删除]作者].确保使用所需的密钥填充SecurityTokenResolver.
搜索一个分辨率,我找到了这篇文章,所以我使用这个网站的基于OpenSSL的解码器解码了上面代码中X509Certificate的token字符串对象中的呈现,因为它是在返回字符串的XAML标记内进行PEM编码.事实上,正如决议文章所述,这是签署证书.所以我继续使用我的ADFS服务器,将签名证书导出为公共证书并将其安装在我的网站上.该链接还提到我必须:<X509Certificate></X509Certificate>tokenTrusted Root Certificate Authorities …
我们决定使用Angular 2作为我们新项目的框架.在试图处理事物的安全性方面,我找不到身份验证与很多的预置型 ADFS.有很多处理Azure AD,但这不是我们的选择.
有谁知道一种方法能够设置Angular 2成功验证ADFS?
在过去的一周里,我对将单点登录与SAML 2.0. 找了很多好文章,详细了解了SSO的流程,但是在我们的C#.Net Framework 4.5解决方案中实现的时候遇到了问题。
让我描述一下我对这个过程的理解以及我应该如何应用它:
用户访问我们的软件,即服务提供商 (SP)。我们正在根据客户的需求调整不同的实例。
输入电子邮件地址后,他应该被重定向到我们的身份提供者 (IdP)。在这一点上,我相信我应该发送一个身份验证令牌来检查用户是否尚未登录 IdP。如果用户是,我想将用户登录到我们的系统。如果他不是,他将登录他们的 IdP。
SAML响应令牌发送回我们的网站 URL。到目前为止,我还没有找到关于生成 SAML 请求的实际过程或SAML在C#代码中解密我们的令牌的方法的任何好的资源。
对于测试,我们使用 ADFS 2.0 作为 IdP,我们SAML从中获取响应。当我们处理响应时,我们希望将数据库中的信息与响应中的电子邮件进行比较,以在让用户进入系统之前验证用户详细信息。
我能找到的例子要么已经过时,要么没有给出详细的解释。如果有人能够通过提供一些实施示例或我尚未设法找到的良好且最新的资源来为我照亮它。
我需要解析被ADFS服务隐藏的站点。
并为此进行身份验证。
有进入的选项吗?
我可以看到,大多数针对后端应用程序或“系统用户”(带有app_id,app_secret)的解决方案。就我而言,我只能使用登录名和密码才能使用它。
问题的示例:在“ chrome我打开”中www.example.com,它将重定向到https://login.microsoftonline.com/,然后https://federation-sts.example.com/adfs/ls/?blabla使用登录名和密码形式。
以及如何访问它python3?
adfs ×10
saml ×3
asp.net ×2
c# ×2
shibboleth ×2
adal ×1
ajax ×1
angular ×1
asp.net-4.0 ×1
asp.net-mvc ×1
aws-cognito ×1
curl ×1
java ×1
node.js ×1
office365 ×1
opensaml ×1
parsing ×1
python ×1
ssl ×1
ws-trust ×1