Tag: wif

如何从ClaimsPrincipal中删除ClaimsIdentity

我有一个内置于ASP.Net MVC的HR Web应用程序,分为多个区域,例如Manager,Employee。 这些区域代表系统中能够执行不同任务的不同类型的用户。 涉及遗留数据库,每种用户类型的信息存储在不同的表中。 此外,为每种用户类型存储的信息类型也不同,因此表格是分开的。 我希望实现基于声明的身份validation有以下几个原因:一,在客户端上存储有关每个用户的详细信息(如用户名,角色等)会更容易。另一个原因是ClaimsPrincipal支持多个身份。 这很重要,因为在某些情况下,单个人可能需要同时在多个身份下访问系统。 例如。 Manager需要访问系统才能执行管理任务,但Manager也恰好是Employee,并且应该能够以Employee身份登录系统。 每个区域都是单独处理的,因此即使用户既是管理员又是员工,他们必须分别登录到每个区域。 所以这是我的问题:通过ClaimsPrincipal的多个身份是否可行? 我还有其他一些技巧吗? 如果要使用多个身份,如何将用户从一个区域中注销,但如果他们碰巧同时也登录到另一个区域,请让他们登录到另一个区域? 通常,要注销,代码看起来像这样: FederatedAuthentication.SessionAuthenticationModule.SignOut(); 我的假设是,这将使用户退出这两个区域。 它是否正确? 假设是这种情况,我想我可以简单地从ClaimsPrincipal中删除特定的Identity,然后重置并编写SessionSecurityToken,但ClaimsPrincipal没有remove方法,只有AddIdentity。 所以我提出了以下伪代码: 注销时: 计算ClaimsPrincipal中的身份数量 如果count == 1正常退出 如果count> 1,因为我们无法删除标识,循环标识并创建一个新的ClaimsPrincipal,排除我们要注销的标识,然后重置并写入SessionSecurityToken 我是在正确的轨道上吗? 是否有一些很好的例子说明如何在ClaimsPrincipal中实现多个身份? 我已经搜索过了,虽然我发现了多个身份的简要提及,但我没有找到实际的例子。

Azure SDK 1.4 – WIF – 尝试初始化默认应用程序域时无法加载C ++模块

我有一个旧的azure应用程序,它运行在azure 1.2 SDK上,依赖于WIF进行身份validation。 我最近一直在尝试将其更新到最新的SDK(1.4)。 应用程序在Azure上编译和运行,包括使用我的STS进行身份validation。 但是,网站上的某些页面不会加载以下错误。 Unable to find assembly ‘Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’. [SerializationException: Unable to find assembly ‘Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’.] System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +4767763 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) +1725 System.AppDomain.get_Id() +0 .DoCallBackInDefaultDomain(IntPtr function, Void* cookie) +191 .LanguageSupport._Initialize(LanguageSupport* ) +354 .LanguageSupport.Initialize(LanguageSupport* ) +102 [ModuleLoadException: The C++ module failed to load while attempting […]

WIF身份委派给WebAPI REST服务

我读过这篇文章: 使用AD FS 2.0的身份委派分步指南 ,介绍如何使用WIF从ASP.NET应用程序到后端WCF服务执行身份委派。 我目前有一个ASP.NET WebAPI REST服务,我希望能够使用身份委派从我的ASP.NET应用程序调用,但我找不到任何有关如何实现此目的的信息。 上面提到的technet文章使用CreateChannelActingAs使用调用用户的安全令牌创建到WCF服务的通道,但显然这种方法不适用于REST API。 任何人都可以指向我任何文章或提供如何使用WIF将身份委托给我的REST服务的描述吗? 我的WebAPI REST服务应用程序已经在Thinktecture的这个库的帮助下使用WIF身份validation进行设置和工作。

Owin OAuth提供程序“实体类型IdentityUser不是当前上下文模型的一部分”

UserManagerFactory = () => new UserManager(new UserStore()); OAuthOptions = new OAuthAuthorizationServerOptions { TokenEndpointPath = new PathString(“/Token”), Provider = new ApplicationOAuthProvider(PublicClientId, UserManagerFactory), AuthorizeEndpointPath = new PathString(“/api/AccountOwin/ExternalLogin”), AccessTokenExpireTimeSpan = TimeSpan.FromDays(14), AllowInsecureHttp = true }; IdentityUser,UserStore来自哪个entity framework。 我想使用我的数据库而不是本地数据库,我从本地数据库表生成“生成”脚本,我在自定义数据库中创建它们,但是当我在下面的行中显示数据库上下文时: UserManagerFactory = () => new UserManager(new UserStore(new MyCustomDBEntities())); 其中MyCustomDBEntities是我在entity framework中的自定义数据库(edmx)我收到以下错误:“实体类型IdentityUser不是当前上下文模型的一部分” 我做错了什么? 我应该创建自己的Usermanager吗? public class MyCustomDBEntities : IdentityDbContext { public MyCustomDBEntities() […]

如何创建测试签名证书?

我正在尝试按照这些说明使用WIF创建SAML2令牌。 说明说 要向SecurityTokenDescriptor提供签名凭据,您必须首先获得对签名证书的引用作为X509Certificate2实例。 从中您可以创建SecurityKeyIdentifier并生成SigningCredentials实例 提供以下代码: X509Certificate2 signingCert = CertificateUtil.GetCertificate(StoreName.My, StoreLocation.LocalMachine, “CN=busta-rpsts.com “); SecurityKeyIdentifier ski = new SecurityKeyIdentifier(new SecurityKeyIdentifierClause[] { new X509SecurityToken(signingCert).CreateKeyIdentifierClause() }); X509SigningCredentials signingCreds = new X509SigningCredentials(signingCert, ski); descriptor.SigningCredentials = signingCreds; 我尝试使用包含主题密钥标识符的makecert制作测试证书,但是当我运行通过上面代码生成的任何证书时,我得到以下System.NotSupportedException : ‘X509SecurityToken’不支持’X509SubjectKeyIdentifierClause’创建。 调用此行时会发生这种情况: new X509SecurityToken(signingCert).CreateKeyIdentifierClause() 现在我知道说明说…… 注意:使用makecert.exe创建的证书不包含主题密钥标识符,因此不能以此方式使用。 您应该使用Windows Server生成证书或从Verisign或同等提供商处购买证书。 …但是我使用了-eku 2.5.29.14的论据,我希望能解决这个问题,我认为这张图片表明我做得对吗? 任何人都可以给我说明我如何创建一个测试证书,我可以使用它来使这段代码正常工作,或指向我正确的方向? 我也不确定他们的意思是“你应该用Windows Server生成证书”。 这是否意味着创建CSR? 提前致谢 :)

设置STS但在webapp中保留formsauthentication

我正在现有的webapp上启用Windows身份基础。 我希望尽可能少地使用现有代码,因此我想使用在应用程序中使用的formsauthentication的登录页面,如果用户通过特定页面输入应用程序,我只需连接STS,例如“im_comming_from_some_other_site.aspx” 。 在“im_comming_from_some_other_site.aspx”中代码如下: Page_Load(…) { if(verifyAgainstSTS() { FormsAuthentication.SetAuthCookie(<some_STS_Userid), …) Response.Redirect("default.aspx") } else { Response.Redirect("http://<STS_server_name/”) } } 是否有人知道这是否可以做到以及如何做? 任何链接到示例代码(如果可用)深受赞赏。 (当validation超时时,当确定要做什么时,需要一些代码;要么转到本地登录页面,要么转到STS登录页面) 我知道这可能看起来像一个糟糕的设计,而不是一直用STS,但我需要尽快实现这一点,我希望保持原始网站尽可能不受影响。

如何从ClaimsPrinciple中删除现有声明?

我正在制作一个开发人员工具,用于模拟Intranet站点的Roles ,以允许开发人员根据需要快速充当任何Role 。 定义的角色是Developer, Team Lead, Team Member, Engineering, Marketing, Guest和网页上的工具调用Web Api来添加或删除Claim …我可以添加但似乎无法找到可以访问.RemoveClaim(claim)或.TryRemoveClaim(claim)以获得此function。 我是否必须创建自定义声明管理器才能获得此function,或者我是否遗漏了某些内容? 我一直在关注System.Security.Claims ,几乎所有其他东西似乎都非常简单,并且没有任何参考需要大量工作来完成我需要的工作。 我在.NET 4.5.1中使用VS 2013 / Web Api2。 网站方面只是使用简单的ajax调用PUT和DELETEfunction,直到我按照我想要的方式工作。 从Controller,我的cs代码如下: public void Put(int id, [FromBody]string role) { if (FindClaim(role) != null) return; var user = HttpContext.Current.User as ClaimsPrincipal; if (user == null) return; var claimId = new ClaimsIdentity(); claimId.AddClaim(new Claim(ClaimTypes.Role, role)); […]

Microsoft.IdentityModel与System.IdentityModel

我正在使用Forms Authentication和ASP.NET MVC 2开发基于声明的授权系统。我看到一个名称空间“Microsoft.IdentityModel”提供了许多与其他“System.IdentityModel”相同的东西。 System.IdentityModel Microsoft.IdentityModel 当function看起来重叠时,为什么这两个命名空间分开存在?

以编程方式在asp.net应用程序上的microsoft.identityModel中配置federatedAuthentication元素

我试图以编程方式生成microsoft.identityModel配置中包含的以下配置。 到目前为止,我还没能成功配置它。 我尝试在application_Start中设置以下内容,但在尝试联合时收到错误消息 “ID5002:FederatedPassiveSignIn控件上的Issuer属性必须设置为可以处理WS-Federation被动协议消息的STS端点的地址。” FederatedAuthentication.WSFederationAuthenticationModule.Realm = “http://Foo.com/”; FederatedAuthentication.WSFederationAuthenticationModule.Issuer = “https://IssuedByFoo.com”; FederatedAuthentication.WSFederationAuthenticationModule.PassiveRedirectEnabled = false; FederatedAuthentication.WSFederationAuthenticationModule.RequireHttps = true; FederatedAuthentication.SessionAuthenticationModule.CookieHandler.RequireSsl = true; FederatedAuthentication.SessionAuthenticationModule.CookieHandler.Path = “/”; 我很确定我没有正确配置FederatedAuthentication,我不确定在哪里正确配置它。 我注意到的一件事是,当我在开始请求上设置断点并检查FederatedAuthentication.WSFederationAuthenticationModule时,当web.config中不存在值时,我看不到设置的属性。

在联合身份令牌上获取“不是有效的Base-64字符串”

浏览我的mvc3 azure web角色时,我随机得到一个base 64编码错误。 我正在使用带有被动身份validation的WIF来对我的ADFS服务器进行身份validation。 我无法隔离它的来源,但我有一个想法,并希望得到一些反馈/帮助。 从调用堆栈看起来它来自一个糟糕的cookie。 当我从chrome开发者控制台查看我的cookie时,来自wif / adfs的“FedAuth”cookie是唯一出现的。 所以我想这些cookie已经被破坏或者其中包含无效字符。 我正在努力validation这一点,但由于错误是随机发生的,所以需要一些时间。 有没有人经历过类似的事情,或者有什么倾向可能导致这种情况? 任何帮助表示赞赏! 这是例外: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters. [FormatException: The input is not a valid Base-64 string as it […]