我有使用net.tcp绑定(流式和缓冲端点)的服务.我想在这些服务中添加WIF联合安全性,同时继续使用net.tcp绑定.我试图创建自定义绑定,但到目前为止都没有成功.以下是我正在尝试的一般架构.我正在寻找正确的绑定配置来使这项工作.
我一直在研究一个WCF服务,它将返回一个Base64编码的字符串,实际上是一个完整的SAML响应XML文档.由于此信息将传递给供应商,因此我必须满足他们对SAML文档的外观和编码方式的要求.我无法获得满足其要求的输出.
我知道WCF和WIF一起应该帮助我.我最初使用WIF构建服务来创建SAML断言(令牌)和其他C#代码以生成最终的SAML文档.除文档的<EncryptedData>节点外,所有这些都可以满足供应商的要求.本节使用AES256和RSAOAEP,但供应商需要AES128和RSA15.因此,我正在寻求解决方案.任何帮助将不胜感激.
这是一个漫步.
该服务接受GUID,该GUID用于调用数据库并返回字段.然后像这样使用它们:
DataTable userData = GetDataForUser(userId);
List<Claim> claims = new List<Claim>()
{
new Claim("ClientId", "NameOfClient")
};
foreach (DataRow row in userData.Rows)
{
string memberId = row["MemberId"].ToString().Trim();
string firstName = row["FirstName"].ToString().Trim();
string lastName = row["LastName"].ToString().Trim();
DateTime dob = Convert.ToDateTime(row["DateOfBirth"], CultureInfo.InvariantCulture);
claims.Add(new Claim("MemberId", memberId));
claims.Add(new Claim("FirstName", firstName));
claims.Add(new Claim("LastName", lastName));
claims.Add(new Claim("DOB", dob.ToString("MM/dd/yyyy")));
}
return claims;
Run Code Online (Sandbox Code Playgroud)
然后我创建一个像这样的SecurityTokenDescriptor:
SecurityTokenDescriptor descriptor = new SecurityTokenDescriptor();
Run Code Online (Sandbox Code Playgroud)
索赔被添加到描述符中,如下所示:
descriptor.Subject = new ClaimsIdentity(claims);
Run Code Online (Sandbox Code Playgroud)
指示描述符加密令牌,如下所示:
descriptor.EncryptingCredentials = GetEncryptingCredentials();
Run Code Online (Sandbox Code Playgroud)
并且GetEncryptingCredentials()例程如下所示:
private EncryptedKeyEncryptingCredentials GetEncryptingCredentials()
{
// Get the Encrypting …Run Code Online (Sandbox Code Playgroud) 我们目前在不同的域上有一些.Net应用程序,每个域都有不同的成员资格.我们正在转向使用单点登录(并且希望单点注销)和Azure上托管的集中成员身份的联合登录.
我们的自然选择似乎是为Azure的访问控制创建我们自己的身份提供者,我们所有的站点都将使用WIF进行身份验证,但非.Net站点可能会在将来对此进行身份验证.
这仍然是一条可以接受的路线吗?
我开发了一个自定义应用程序,它能够使用CRM Web服务并在自定义.NET页面中执行CRM中的Windows Live Id身份验证,创建,读取和更新操作.当我在Visual Studio 2010中调试应用程序时,它运行得非常好,但是当我部署相同的应用程序并尝试进行身份验证时,它显示以下错误:
无法加载文件或程序集"Microsoft.IdentityModel,Version = 3.5.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35"或其依赖项之一.该系统找不到指定的文件.
我无法理解问题发生在哪里.
使用WSFederationHttpBinding我的性能非常差 - 每秒只处理250个请求.
捆绑:
public class CustomFactoryActive : ServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
ServiceHost host = new ServiceHost(serviceType, baseAddresses);
CommonConf.ConfigureServiceHost(host);
string issuerAddress = ConfigManager.ActiveSTS;
string issuerMexAddress = issuerAddress + "/mex";
WSFederationHttpBinding wsFedBinding = new WSFederationHttpBinding();
wsFedBinding.Security.Mode = WSFederationHttpSecurityMode.Message;
wsFedBinding.ReliableSession.Enabled = false;
wsFedBinding.MaxReceivedMessageSize = wsFedBinding.MaxBufferPoolSize = Constants.MaxFileSize;
XmlDictionaryReaderQuotas quotas = wsFedBinding.ReaderQuotas;
quotas.MaxArrayLength = quotas.MaxBytesPerRead = quotas.MaxStringContentLength =
quotas.MaxNameTableCharCount = quotas.MaxDepth = (int)Constants.MaxFileSize;
var messageSecurity = wsFedBinding.Security.Message;
messageSecurity.IssuedTokenType = "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1";
messageSecurity.IssuedKeyType = SecurityKeyType.SymmetricKey;
messageSecurity.EstablishSecurityContext = false;
messageSecurity.NegotiateServiceCredential …Run Code Online (Sandbox Code Playgroud) SessionAuthenticationModule课堂上的一件事是SessionSecurityTokenReceived.这允许我们查看从AD FS收到的会话令牌.该SessionToken两个性质叫ValidFrom和ValidTo.在我们现在的配置中,取这两者之间的差异是1小时.我查看了AD FS中的设置,但我一直无法找到如何更改此值.有谁知道它在哪里?
我被指派在我们的产品中找到一种实施SSO的方法.我们有几个Winform应用程序和一个asp.net 4.0 Web应用程序(不是MVC).
所有产品都是使用.Net 4.0构建的,Web应用程序是ASP.NET 4.0.一些Winforms通过Web服务(asmx)与我们的API进行通信,有些则直接使用我们的API.Web应用程序也使用相同的API.我们提供一组Web服务(asmx),它们使用相同的API到外部客户端.
目前,我们在系统中拥有自己的身份验证实现(用户,密码,角色),我们希望用SSO替换它.或者这两种认证制度能以某种方式共存吗?Winforms用于Intranet,Web应用程序在Intranet中使用,我们还为客户端托管Web应用程序(可从Internet访问).
用户是在我们的系统中创建的,但同时我们使用自己的工具从Active Directory导入用户.Active Directory确实是主要的用户来源.
我读过有关Windows Identity Foundation的内容,我想知道是否可以使用它来实现SSO.但我不明白的是如何在winform应用程序中直接使用API时使用WIF.
我想要实现的是从我们的系统中删除所有用户管理并使用Active Directory作为用户源.我想这意味着使用ADFS 2.0创建声明等.
我可以在此实现中使用.Net Framework 4.5(我知道WIF现在是.Net Framework 4.5中的一等公民).
你有什么建议怎么做?WIF是在winforms应用程序和Web应用程序中实现SSO的最佳替代方案吗?
我正在编写一个使用Windows Identity Foundation的ASP.net应用程序.我的ASP.net应用程序使用基于声明的身份验证,并将被动重定向到安全令牌服务.这意味着当用户访问应用程序时,它们会自动重定向到安全令牌服务,在那里他们会收到一个安全令牌,用于向应用程序标识它们.
在ASP.net中,安全令牌存储为cookie.
我希望用户可以在我的应用程序中单击某些内容,删除cookie并将其重定向到安全令牌服务以获取新令牌.简而言之,可以轻松注销并以其他用户身份登录.我尝试在代码中删除包含令牌的cookie,但它会以某种方式持续存在.
如何删除令牌以便用户可以再次登录并获取新令牌?
我正在使用Windows Identity Foundation管理我们网站的登录.
当用户登录时,我正在使用他的请求中的一些信息来提出索赔.一切正常,但现在我需要管理这个场景:
所以我的问题是:
我试过这段代码:
public void ExpireClaims(HttpContextBase httpContextBase)
{
var module =
httpContextBase.ApplicationInstance.Modules["WSFederationAuthenticationModule"] as
WSFederationAuthenticationModule;
if (module == null)
{
return;
}
module.SignOut(true);
}
Run Code Online (Sandbox Code Playgroud)
但模块总是空的.
我试过这个:
public void FederatedSignOut(string replyUrl)
{
WSFederationAuthenticationModule.FederatedSignOut(null, new Uri(replyUrl));
}
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,我得到一个空的引用execption.
非常感谢.
UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>());
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId, UserManagerFactory),
AuthorizeEndpointPath = new PathString("/api/AccountOwin/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
AllowInsecureHttp = true
};
Run Code Online (Sandbox Code Playgroud)
IdentityUser,UserStore来自哪个实体框架.
我想使用我的数据库而不是本地数据库,我从本地数据库表生成"生成"脚本,我在自定义数据库中创建它们但是当我在下面的行中显示数据库上下文时:
UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>(new MyCustomDBEntities()));
Run Code Online (Sandbox Code Playgroud)
MyCustomDBEntities是实体框架中的自定义数据库(edmx)我收到以下错误:"实体类型IdentityUser不是当前上下文模型的一部分"
我做错了什么?我应该创建自己的Usermanager吗?
public class MyCustomDBEntities : IdentityDbContext<IdentityUser>
{
public MyCustomDBEntities()
: base("name=ConnectionStringName")
{
}
}
Run Code Online (Sandbox Code Playgroud) wif ×10
c# ×3
wcf ×3
asp.net ×2
azure ×2
.net ×1
adfs ×1
adfs2.0 ×1
assemblies ×1
cookies ×1
passive-sts ×1
web-services ×1
winforms ×1