我很想知道如何从已经对启用WIF的WCF服务进行身份验证的WIF应用程序发送安全令牌.
任何援助都将得到满足
我们有一个Web应用程序(asp.net mvc 3),它应支持通过AD进行内部使用的SSO.我们还有一个庞大的外部用户社区,我们希望为所有Web应用程序提供SSO.例如:external_user1使用相同的登录访问webappA,webappB和webappC.此外,domain\user1可以访问所有三个webapps.我们计划使用WIF和ADFS 2.0.
我们不希望为所有外部用户提供AD帐户,因此过去我们可能尝试过使用ADFS 1.x和ADAM的解决方案.但是,我们在Windows Server 2008 R2和ADFS 2.0上无法使用AD LDS(ADAM的后继者)来验证用户.
什么是SSO方法(使用微软产品)?
我们有一个最初使用.NET 4.0和WIF 3.5(1.0?)构建的应用程序.我正在将其转换为使用WIF 4.5,因为我们已将应用程序升级到.NET 4.5.我已经完成了所有代码更改,并且一直在与配置设置进行斗争.我目前的困境是使用<claimTypeRequired>元素.根据这个文档,它应该是<identityConfiguration>的孩子,但是当我修改我的配置看起来像这样
<system.identityModel>
<identityConfiguration>
<claimTypeRequired>
...
</claimTypeRequired>
Run Code Online (Sandbox Code Playgroud)
我在运行时遇到以下错误
Parser Error Message: Unrecognized element 'claimTypeRequired'.
Run Code Online (Sandbox Code Playgroud)
如果我只是注释掉<claimTypeRequired>块,我就会遇到这个错误,但后来又遇到了另一个问题.我们通过以下配置修改了现有应用程序中的maximumClockSkew
<securityTokenHandlerConfiguration>
<maximumClockSkew value="1" />
</securityTokenHandlerConfiguration>
Run Code Online (Sandbox Code Playgroud)
前面引用的配置文档甚至没有提到maximumClockSkew.我想我会试着把它留进去看看会发生什么.会发生什么
Parser Error Message: Property 'maximumClockSkew' is not a ConfigurationElement.
Run Code Online (Sandbox Code Playgroud)
但是当我使用JustDecompile查看SecurityTokenHandlerConfigurationElement类时,我可以看到该属性:
[ConfigurationProperty("maximumClockSkew", IsRequired=false, DefaultValue="00:05:00")]
[IdentityModelTimeSpanValidator(MinValueString="00:00:00")]
[TypeConverter(typeof(TimeSpanOrInfiniteConverter))]
public TimeSpan MaximumClockSkew...
Run Code Online (Sandbox Code Playgroud)
所以它似乎期待它在那里.
这几乎就像微软实际上并不希望我们使用这些东西.
我不确定为什么,但是当我尝试运行我的ClaimsTransformer()模块时,我的FederatedAuthentication.SessionAuthenticationModule解析为NULL并且崩溃我的应用程序:
public void EstablishSession(ClaimsPrincipal principal)
{
var sessionToken = new SessionSecurityToken(principal, TimeSpan.FromHours(8))
{
IsPersistent = false, // make persistent
IsReferenceMode = true // cache on server
};
FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(sessionToken);
// FederatedAuthentication.SessionAuthenticationModule == null and I throw an error :(
}
Run Code Online (Sandbox Code Playgroud)
这是我的web.config中的内容:
<configSections>
<section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</configSections>
<system.web>
<authentication mode="None" />
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="RoleManager" />
<remove name="FormsAuthentication" />
<remove name="SessionAuthenticationModule" />
<add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, …Run Code Online (Sandbox Code Playgroud) 我们正在开发一个OWIN MVC5项目.我们使用自己的实现IUserStore<T>来集成用户管理,这是我们公司框架的一部分.到目前为止这个工作正常.我们希望通过声明提供角色成员资格和其他安全配置.我已经看到(并快速测试)实现IUserClaimStore<T>或附加ClaimsIdentityFactory到UserManager的方法.
在这两种情况下,我都会看到声明存储在用户的cookie中以及当角色或其他声明在Web应用程序后面发生变化时(通过另一个直接访问用户管理存储的应用程序),用户cookie包含旧的声明和用户拥有的权限太多或太少都不如她应该拥有的权限.
我想到的一种可能性是,检查每个请求或某个时间间隔内的请求,是否已更改用户声明的后端配置,如果是,则刷新用户cookie.
这是正确的方法还是MVC5/Owin提供更优雅/有效的方式来满足此要求.如果这是正确的方法,哪里是检查和更新cookie信息的最有效的地方?
我有一个自定义STS服务,接收用户名/密码作为客户端凭据,如果用户名/密码有效,则生成令牌.我在自己的用户商店中进行用户名/密码检查.
但是现在我需要让我的自定义STS接收SAML 2.0令牌(从其他身份提供者发出)并验证令牌,验证声明并为依赖方(WCF服务)生成令牌,该令牌仅信任来自自定义STS的令牌.
我们有什么方法可以做到吗?有样品吗?
我尝试使用"IssuedToken"作为客户端凭据类型,但不确定如何进行此操作.任何帮助深表感谢.
我试过这个,但似乎已经过时了.
我有一个在Visual Studio dev-fabric(azure项目)中运行的ASP.NET网站,并且正在使用ACS和WIF.我的身份验证过程无效,因为登录后我得到了这个:
A potentially dangerous Request.Form value was detected from the client (wresult="<t:RequestSecurityTo...").
Run Code Online (Sandbox Code Playgroud)
文档说明我需要添加
<pages validateRequest="false" />
Run Code Online (Sandbox Code Playgroud)
和
<httpRuntime requestValidationMode="2.0" />
Run Code Online (Sandbox Code Playgroud)
我做了 - 但我仍然得到错误.我还在页面级别添加了validateRequest ="false".但是纳达 - 仍然得到同样的错误.
这些步骤似乎解决了其他海报的问题 - 它是否与在dev-fabric中运行有关?
我遇到了通过证书进行身份验证的WCF服务问题.我得到的错误是传出消息的身份检查失败.远程端点的预期DNS标识是xxx ....
我看过很多关于这个的帖子,所有人都说把dns设置为证书的名称/主题.
<identity>
<dns value="WcfServer" />
</identity>
Run Code Online (Sandbox Code Playgroud)
我试过这个并且它不起作用,我还能做什么?
卢克
我正在使用AD FS来验证.NET 4.5应用程序中的用户.我找不到从控制台应用程序请求/接收令牌并将该令牌转换为ClaimsPrinciple的任何示例.我能找到的唯一例子是基于WCF的配置,我真的希望看到实际的代码能够以最简单的形式完成.
我已经安装了AD FS,并且认为我已将其配置为准备接收请求.我已经创建了一个依赖方,给它一个密钥并分配了几个声明.
任何人都可以指出我正确的方向或我现在需要在我的控制台应用程序中做什么来向它发送身份验证请求?
谢谢
我经常遇到这个错误,我的努力没有任何结果.错误:
ID8030:无法解析'type'属性的值.验证'issuerNameRegistry type ="Webapp1.TrustedIssuerNameRegistry,webapp1"元素的type属性是否正确.
这是我的TrustedIssuerNameRegistry类:
namespace Webapp1
{
public class TrustedIssuerNameRegistery : IssuerNameRegistry
{
private string issuerName = string.Empty;
public override string GetIssuerName(SecurityToken securityToken)
{
if (securityToken != null)
{
X509SecurityToken x509Cert = securityToken as X509SecurityToken;
if (x509Cert != null && x509Cert.Certificate.SubjectName.Name == "CN=busta-ip1sts.com")
{
issuerName = x509Cert.Certificate.SubjectName.Name;
}
}
if (string.IsNullOrEmpty(issuerName))
{
throw new SecurityTokenException("Untrusted issuer.");
}
return issuerName;
}
public override string GetIssuerName(System.IdentityModel.Tokens.SecurityToken securityToken,
string requestedIssuerName)
{
return base.GetIssuerName(securityToken, requestedIssuerName);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的web.config配置:
<system.identityModel>
<identityConfiguration>
<certificateValidation …Run Code Online (Sandbox Code Playgroud) c# asp.net claims-based-identity wif sts-securitytokenservice