我有一堆网站设置相同,使用WIF身份提供商.我最近将业务逻辑从Web应用程序转移到Web Api服务应用程序中.它在与其他站点不同的虚拟目录中运行.想法是浏览器将数据放入页面AJAXy.
我遇到的问题是保护Web API.似乎WIF单点登录对传统网站没有效果.用户可以访问一个网站,重定向到身份提供商,登录并重定向回他们想要的网站.当他们访问另一个站点时,他们也会被重定向回身份提供者,但无需登录,因为FEDAUTH cookie存在,因此他们会自动进行身份验证并重定向到第二个站点.
这对于Web Api场景不起作用,因为当浏览器对它进行GET时,Api将返回重定向到调用javascript时应该期待JSON.
甚至可以用WIF保护Web Api吗?
我安装了AD FS 2.0,我在另一台域外安装了WIF和VS2010.
我创建了一个ASP.NET MVC 3应用程序,并通过Add STS Reference向导进行配置,它从我的AD FS下载了FederationMetadata.xml.
我在AD FS中添加了依赖方信任,将标识符指定给我的MVC应用程序的URL(http:// localhost:16034 /),并创建了一个声明规则,即传递或过滤传入声明,带有传入声明类型是Windows帐户名称.
我还在WS-Federation的RP中添加了一个端点,URL是https://192.168.56.101/adfs/ls/,这是我的AD FS IP地址.
然后,当我启动网站时,它被重定向到AD FS,这是https://192.168.56.101/adfs/ls/?wa=XXXX&wtrealm=XXXXX.但最后我得到一个错误页面说该页面错误,带有参考代码.
我检查了AD FS机器,发现错误是
MSIS7001:未找到被动协议上下文或无效.如果上下文存储在cookie中,则客户端提供的cookie无效.确保客户端浏览器配置为接受来自此网站的cookie并重试此请求.
但问题是,当我使用Fiddler时,我可以看到我的HTTP请求使用的cookie如MSISAuth = XXXXX MSISAuth1 = XXXXX MSISAuthenticated XXXXX MSISLoopDetectionCookit XXXXX
我做错了什么?
我正在尝试整合一个声明感知的WCF服务和客户端.
我正在使用thinktecture Identity Server,我通过查看"使用带有WCF/SOAP的令牌"示例将控制台客户端放在一起:
var token = GetSecurityToken();
var binding =
new WS2007FederationHttpBinding(
WSFederationHttpSecurityMode.TransportWithMessageCredential);
binding.Security.Message.EstablishSecurityContext = false;
var factory =
new ChannelFactory<IService1>(
binding,
new EndpointAddress("https://localhost:44301/Service1.svc"));
factory.Credentials.SupportInteractive = false;
factory.ConfigureChannelFactory();
var service = factory.CreateChannelWithIssuedToken(token);
var result = service.GetData(42);
Run Code Online (Sandbox Code Playgroud)
我有(看起来像什么)来自STS的有效令牌.
但是,它在调用中引发异常GetData,如下所示:
序列化安全密钥标识符时出错.有关更多详细信息,请参阅内部异常.
内部异常如下:
令牌序列化程序无法序列化"System.IdentityModel.Tokens.Saml2AssertionKeyIdentifierClause".如果这是自定义类型,则必须提供自定义序列化程序.
我能找到的这个问题唯一提到的就是这个问题在MSDN论坛上,但这只是略有关联.
查看调试器,似乎端点行为包括(最终)Saml2SecurityTokenHandler,其他链接暗示的就是所需的全部内容.
我错过了什么?
我已经使用最新WIF SDK(适用于.NET 4.0)附带的被动和活动案例的项目模板成功创建了一个可用的自定义STS.一切都按预期工作.
我现在正在尝试将我的Web应用程序和服务升级到.NET 4.5,包括我的自定义STS.我已经能够将Microsoft.IdentityModel.xxx中的所有命名空间/类映射到框架中内置的新命名空间/类,但有一个例外--WSTrustServiceHostFactory.
该类似乎不再存在,我无法弄清楚如何替换它提供的功能.即,从以下链接:http: //msdn.microsoft.com/en-us/library/microsoft.identitymodel.protocols.wstrust.wstrustservicehostfactory
<%@ServiceHostLanguage="C#"Debug="true"Service="XXX.XXX.MyActiveSTSConfiguration"Factory="Microsoft.IdentityModel.Protocols.WSTrust.WSTrustServiceHostFactory"%>
Run Code Online (Sandbox Code Playgroud)
升级到4.5后,我的被动STS目前正在工作.我需要找到一个使用4.5框架实例化活动SecurityTokenService的适当/推荐方法(理想情况下,对于SDK项目模板中的大多数配置使用web.config).任何建议表示赞赏.
我正在使用 .NET 4.5 和基于令牌的安全性来实现 WCF 服务。在客户端,我使用myfact.CreateChannelWithIssuedToken()之前从 STS 检索到的令牌进行调用,当我使用此通道调用服务时,我收到以下错误(在 WCF 服务跟踪中):
Cannot resolve KeyInfo for decryption: KeyInfo 'SecurityKeyIdentifier
(
IsReadOnly = False,
Count = 1,
Clause[0] = EncryptedKeyIdentifierClause(EncryptedKey = qDJDOHUxLxDP8/5baRbY6LrnIX2cYLGwC8b9xDQbEfLsYhcowtszecfWK93dFQHBNV+COHSZpKapJlzrbi12QlObuhfpB08vIxrgXCLg69w4PfAq/jzJcK3N16GHHADSE6XT0KVBXQbcwJqyrELLGAc9ve3cnn52EDg6rkVKBNg=, Method 'http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p')
) ', available tokens 'System.ServiceModel.Security.AggregateSecurityHeaderTokenResolver'.
Run Code Online (Sandbox Code Playgroud)
我怀疑这是因为该服务无法解密传入的安全令牌,但我不知道为什么会这样。该证书位于 LocalMachine\My 存储中,并具有关联的私钥。
WCF 如何找到必要的证书,以及为什么在我的情况下无法找到它?
我使用自定义ClaimsAuthorizationManager在MVC中进行授权,但我遇到了一个问题.
异常信息:异常类型:NotSupportedException异常消息:ID1075:如果没有当前主体(HttpContext.Current.User)作为ClaimsPrincipal,则不能使用ClaimsAuthorizationModule.在System.IdentityModel.Services.ClaimsAuthorizationModule.Authorize()
我没有在应用程序的早期更改有关Current Principal的任何内容......想法?我很难过,并且正在寻找那个没有发现任何错误的错误......
<system.webServer>
<modules>
...
<add name="ClaimsAuthorizationModule" type="System.IdentityModel.Services.ClaimsAuthorizationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</modules>
</system.webServer>
<system.identityModel>
<identityConfiguration>
<claimsAuthorizationManager type="NamespaceFun.CustomAuthorizationManager, NamespaceFun" >
<policy resource="http://localhost:52606/" action="GET">
</policy>
</claimsAuthorizationManager>
...
</identityConfiguration>
</system.identityModel>
public class CustomAuthorizationManager : ClaimsAuthorizationManager
{
public override bool CheckAccess(AuthorizationContext context)
{
return true;
}
}
Run Code Online (Sandbox Code Playgroud) 我在 web.config 中有我的配置,它工作正常。
<configuration>
<system.identityModel.services>
<federationConfiguration>
....
</federationConfiguration>
</system.identityModel.services>
</configuration>
Run Code Online (Sandbox Code Playgroud)
如何将它从 web.config 移到自定义配置文件并从代码加载?
我想使用此配置的相同结构,以便在必须更改此配置文件时不必更改代码中的任何内容。
我有一个简单的 2 页 ASP.NET 应用程序,作为“天蓝色网站”托管。我想通过与我公司的 ADFS 集成来确保此应用程序的安全。将此应用程序与 ADFS 集成的最简单方法是什么?如果没有必要,我不想参加 ACS。看起来可以让 asp.net 应用程序使用 WIF 直接与 adfs 对话。有人可以确认这是否有效并分享任何指导以使其正常工作吗?
更一般地说,谁在Windows平台上成功使用WIF/ADFS/SSO,是否值得实施,它将成为持久技术的可能性有多大?
从表面上看,通过阅读有关该主题的一些白皮书(PDF),文章和书籍,这似乎是一个完美的解决方案 - 特别是对于拥有内部网站的公司,该网站向外部用户和合作伙伴公开某种程度的功能.好吧(或计划将来).但它听起来几乎过于完美.我所获得的大部分信息都来自微软自己.
我想我的具体问题是:
根据文档,这两个模块都将用于创建IClaimsPrincipal的实例.我不明白为什么WIF懒得使用2个HttpModules而不是一个?对不起,我是WIF新手