我正在从事一个项目,该项目使用Active Directory用于用户信息,ADF用于身份验证和SSO,以及几个使用ASP.NET MVC构建的自定义应用程序. 授权模型是主张和基于角色的;也就是说,用户的角色可以作为对相关应用程序的主张,通过ADFS发行的代币(使用Wif). . 每个角色都有针对应用程序的各种资源的定义权限列表(即Admin对资源X的写入许可).我们的基本授权模型可以与一些硬编码的权限合作. 我的问题是:存储各种角色实际权限的最佳方法/地点是什么?可以在ADF中完成,还是需要单独的商店(我猜后者)?权限遵循与XACML相同的广泛模式(用户/角色:资源:操作),XACML解决方案可能很容易合并,但是最受欢迎的.NET实现XACML(XACML.NET)似乎使用XML作为唯一的一种存储机制将是不可行的(我们有很多资源可以存储对抗的权限 - 可能是数千个). 人们用什么?最明显的解决方案似乎只是将三重态存储在SQL Server中,但是考虑了所有现成的
以下是关于 wif 的编程技术问答
我们正在从事OWIN MVC5项目.我们使用自己的实现IUserStore来整合我们公司框架的一部分的用户管理.到目前为止,这很好. 我们希望通过索赔提供角色成员资格和其他安全配置.我已经看到(并迅速测试)实现IUserClaimStore或将ClaimsIdentityFactory附加到Usermanager的方法. 在这两种情况下,我都知道索赔存储在用户的cookie以及何时或另一个索赔在Web应用程序后面发生变化时(通过另一个直接访问用户管理存储的应用程序),用户cookie包含旧声明,用户的权限比她应该拥有的. 如果用户索赔的后端配置已更改,如果是的,则在某个时间间隔内检查每个请求或请求的可能性,如果是的,则可以刷新用户cookie. 这是正确的方法,还是MVC5/Owin为遵守此要求的更优雅/有效的方法.如果这是正确和唯一的方法,那么在哪里检查和刷新Cookies信息的最有效的地方? 解决方案 我们将此功能添加到2.0中,这是您将如何配置
我正在使用ASP.NET 5 MVC,OWIN和OAUTH2 BEARER令牌开发Web应用程序. 以下索赔的Indentity System.Security.Claims命名空间. 不幸的是,似乎在ClaimsIdentity实例中添加complexClaim,丢失了派生的类类型信息,并且索赔被存储为a System.Security.Claims.Claim. var complexClaim = new ComplexClaim(@"http://it.test/currentpassport", passport); var claims = new List() { complexClaim }; identity.AddClaims(claims); 当我尝试从身份中恢复索赔时,将其投入到ComplexClaim键入的结果中. var passportClaim = identity.
在与OWIN的MVC5应用程序中,我们还使用本地帐户的其他外部登录(Google).当用户使用其本地帐户登录时,他可以激活记住他的选项,因此他不必每次新登录.当他使用Google-Account登录时,他每次都必须在Google的外部登录按钮上单击. 是否有一个内置选项可以激活外部登录的"记住我"选项?还是有安全的方法来添加此功能? 解决方案 当您登录用户身份时,您只需要设置与true的态度(您还需要添加某种记住我的复选框) AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = }, ); 其他解决方案 跟进Hao Kung的建议. 您将在accountController.cs文件中找到有关代码行.默认函数是: private async Task SignInAsync(Applicat
我正在构建一个ASP.NET Web应用程序,该应用程序可以通过Windows Identity Foundation身份验证用户. 该组织具有本地ADFS STS.他们的Office365通过Microsoft Federation Gateway与本地STS进行了验证.新的Web应用程序还将针对带有Wif的本地ST进行身份验证. 我可以在新应用程序和Office365环境之间建立无声的单个标志吗?因此,用户登录到Web应用程序后,不必登录Office365,反之亦然. 解决方案 是的,您应该能够通过直接使用Office365的ASP.NET应用程序来实现这一目标.您可能已经知道,通常情况下,您的Office365与PREM AD同步,并且与本地ADFS服务器设置了信任.当您登录您的Web应用程序时,用户将被重定向到Office365以输入其UPN(通常是电子邮件地址). Office365使用它来找出将您重定向到哪个本地ADFS服务器. 如果您是从域内登录的
我正在编写使用Windows Identity Foundation的ASP.NET应用程序.我的ASP.NET应用程序使用基于索赔的身份验证,并被动重定向到安全令牌服务.这意味着,当用户访问应用程序时,他们会自动将其重定向到安全令牌服务,并在其中收到安全令牌,并将其标识为应用程序. 在ASP.NET中,安全令牌存储为cookie. 我希望用户可以在我的应用程序中单击这些内容,以删除cookie并将其重定向到安全令牌服务以获取新令牌.简而言之,使其易于登录并作为其他用户登录.我尝试在代码中删除含令牌的cookie,但它仍然以某种方式持续. 如何删除令牌,以便用户可以再次登录并获取新令牌? 解决方案 我找到了解决方案.简洁地说: Dim smartWsFederationAuthenticationModule As _ Microsoft.IdentityModel.Web.WSFederationAuthenticationMod
我正在处理包含加密Assertion的WIF中的SAML2令牌.标记不包含"主题标识符密钥"扩展属性,因此Wif SecurityTokenHandler试图从LocalMachInestore/个人获得正确的X509证书时失败. 显然,用于加密令牌的证书不包含滑雪板扩展名,当然,令牌生成代码(Java)似乎并不需要它.为了避免不得不修改生成代码,有一种方法可以让Wif secuityTokenResolver不检查接收到的Ski的令牌,而只需直接使用本地商店证书来解密令牌? 解决方案 最后,我刚刚实施了一个自定义的SecurityTokenResolver,并实现了TryResolvesecurityKeyCore方法. 这是代码: public class mySaml2SSOSecurityTokenResolver : SecurityTokenResolver { List _tokens; public
我整天都在盯着这件事,无济于事,我没有想法. IP-STS处理登录名,然后将其传递给RP-ST,该RP-ST填充了令牌,然后将其填充到网站上.这可以正常工作.我在IP-ST上有一些WCF功能,例如更改密码/重置密码,需要访问它们.围绕i 阅读后,应该能够将已经分配的令牌发送到WCF,以确保用户对用户进行身份验证.从我所看到的,它是发送令牌,但不是正确的,也不是我想要的方式,因为目前似乎需要一个用户名. 理想情况下我希望它将令牌分配给用户,而不必重新重新要求或重新创建任何东西,并且绝对不需要用户名/密码. 我目前遇到的错误是: 从另一方收到了无抵押或不正确的固定过失.有关故障代码和详细信息的内部故障移位. 细节: 该消息无法处理.这很可能是因为动作'http://schemas.xmlsoap.org/ws/2005/02/02/trust/rst/rst/issue'是不正确的,或者该消息包含无效或过期的安全性上下文上的标记在绑定之间.如果由于不活动而导致该服务中止该渠
全新的adfs,wif,索赔..我在问题中遵循了代码: asp.net Web表单 - 如何将WIF身份验证与成员资格提供者和角色提供商结合在一起,并能够使用它来被动地验证用户对AD FS进行登录的用户.但是,对于该用户如何检索其某些LDAP属性的TP查询AD FS我会丢失,因为我通过依赖方信任的索赔规则进行了配置,就像我在ADFS服务器中配置的那样.有任何想法吗?希望使用我上面引用的类似代码来检索索赔而不是认证. 解决方案 问题的最大部分是上述代码根本不依赖ADF.相反,它在本地创建身份. 我相信您应该宁愿使用ADF的被动流,即,您希望将浏览器重定向到ADF,然后希望用户索赔退回.在我的一个教程中,这里描述了最简单的方法之一:
我们有两个现有的旧版Web应用程序,一个用于域内的Windows身份验证以及一个Internet应用程序,一个用于Internet Application,执行自定义Web Forms fors fors fors fors fors fors fors fors fors fors fors fors fors fors fors fors fors fors fors fors formerne +密码的身份验证.现在,开发了一个新的Web应用程序,并将在Internet中向Internet和Intranet用户提供,并处理两个身份验证模型.因此,我们决定使用 wif .我们将在Windows Server 2012上使用ASP.NET 4.5 MVC 4. Intranet身份验证不应该是问题,因为我们可以在此处使用ADFS 2.0. ,但我们目前不知道如何求解用户名 +密码身份验证.看来我们需要开发一个自定义 usernamesecuritytokenhandhand
我现在正在研究一个Web项目,其中选择的身份验证机制是Windows身份验证(Intranet应用程序).一旦项目上线,经过两个月左右的差距,将设置STS.然后,Web项目应该开始使用它,并将其用于代码.怎么做? 我计划在我自己的STS(WCF项目/Web应用程序)中使用基于索赔的身份验证,并将其实时.一旦在Intranet(ADFS)/Cloud(WAAD)设置STS后.我只是将本地sts URL更改为新的"原始" sts. 1)它可以工作吗? 2)本地ST可以是DLL吗? Windows身份验证不需要 解决方案 STS,框架中包含.NET 4.5索赔,实际上不需要额外的设置/配置来支持索赔.而且,仅当您试图联合起来时才需要STS. 请参阅 how-to 将自定义开发的STS部署到生产环境中不是一个好主意,您应该使用adfs或thinkTecture.IdentItyServer.v2或任何其他类似的联邦产品. 其他解决方案 您将要开始将应用程序配
在安全令牌服务(STS)中使用Windows Identity Foundation(WIF),是否可以创建可以满足以下问题的复杂主张: 对于具有"支持"角色的用户,该用户: 只能查看和使用Resource1 无法更新,创建或删除Resource2 无法创建或删除Resource3 只能使用"资源"标签使用和更新资源. 这是一个人为人为的例子,但是这可能吗?我认为我想授权具有基本索赔的经过身份验证的用户,然后在应用程序中添加相关的复杂索赔(这些索赔将存储在数据库中并在应用程序用户的控制下). ). 谢谢, 理查德 解决方案 您肯定可以像这样建模 - 它们只是字符串 - 您能做的一切都可以做任何主张的字符串;) ,但这绝对是一个反模式.索赔描述用户的身份 - 可能包括粗粒状授权信息.这里有一条细线. 但是,对于您的用例,您宁愿在权利要求中实施您的授权策略,并使用身份索赔作为"计算"您的细粒度授权决策的输入.
这是我在依赖方中使用的注销代码: FederationConfiguration cfg = FederatedAuthentication.FederationConfiguration; var fam = FederatedAuthentication.WSFederationAuthenticationModule; fam.SignOut(false); var signOutRequestMessage = new SignOutRequestMessage(new Uri(fam.Issuer), fam.Realm); return new RedirectResult(signOutRequestMessage.WriteQueryString()); 并从RP上注销并将其重定向到身份服务器"已签名"页面,但是我仍然在身份服务器上登录,这是预期的行为吗?我如何更改此操作,以便从身份服务器中登录? 解决方案 我已经
我在ASP.NET MVC中构建了HR Web应用程序,例如经理,员工.这些领域代表了能够执行不同任务的系统中不同类型的用户.涉及旧数据库,每种用户类型的信息都存储在另一个表中.另外,每种用户类型存储的信息类型都是不同的,因此表是分开的. 我希望以几个原因实现基于索赔的身份验证:一个原因,将每个用户(例如用户名,角色)上的每个用户(例如用户名,角色等)存储更容易.另一个原因是SopplincipaL支持多个身份.这很重要,因为在某些情况下,一个人可能需要同时在多个身份下访问系统.例如.经理需要访问系统以执行管理任务,但是经理也恰好是员工,并且应该能够以员工的身份登录系统.每个区域进行单独处理,因此即使用户既是经理,又必须单独登录到每个区域. 所以这是我的问题:通过索赔的多种身份,要走的路?我还有其他一些技术吗?如果要走多个身份,我该如何将用户记录在一个区域中,但是如果碰巧也登录到另一个区域,请将其登录到另一个区域?通常,要注销,代码看起来像这样: FederatedAu
我试图从LiveID API中检索一些信息,但正在获取错误: The provided request does not include an access token. An access token is required in order to request this resource. 代码相对简单;我包括图书馆,用nameidentifier要求我从wif中获得nameidentifier的主张,然后请求 me 路径. 从错误消息中我推测我没有提供访问令牌...但是我的应用程序自从我成功检索索赔以来就不会有这个? 这是我的代码: WL.init({ client_id: 'O0UpnnhoiFljBJAtTxhVliu4qtbUW
我已经阅读了这篇文章:具有AD FS 2.0逐步指南的身份委托 关于如何使用从ASP.NET应用程序到后端WCF服务的WIF执行身份委托.我目前有一个ASP.NET WebAPI REST服务,我希望能够使用Identity委托从ASP.NET应用程序调用,但是我找不到有关如何完成此操作的任何信息.提到的Technet文章使用CreateChannelActingAs使用调用用户的安全令牌创建WCF服务的通道,但是显然,此方法不适用于REST API.谁能将我指出任何文章,或者提供有关我如何使用WIF委派身份的描述? 我的WebAPI REST服务应用程序已经在 bribraral 库中,在 解决方案 我找到了解决方案(我正在使用智商身份服务器).我必须设置一个我的Web应用程序使用(webappaccount)将我服务委派给我服务的委托帐户(webappaccount>>). Web应用程序我必须向我的STS进行服务调用,以提供引导令令牌以接收新的安全令牌,然后我可以使用它来对
是否可以通过单独的ASP.NET应用程序共享对SharePoint 2010用户登录的基于索赔的身份验证? 以下 avermate SharePoint 2007并通过表格AUTH和共享机器键等表单身份验证,但是我找不到有关现已在SharePoint 2010中使用的索赔身份验证的外部应用程序的任何信息? 解决方案 谁在应用程序中的SP中对用户进行身份验证? 在基于索赔的体系结构中,您通常会部署一个sTS,可以对用户进行身份验证并发布安全令牌(例如ADFS).然后,您将把令牌返回到该应用程序(在您的情况下SharePoint) 由于Authn已经被外部化,因此您需要做的就是将STS(例如ADF)添加为ASP.NET应用程序的受信任发行者(使用WIF).从概念上讲,您的SP应用程序和ASP.NET应用程序不同,具有不同的规则. 从可用性的角度来看,用户将永远不会看到双重登录,并且为他处理了所有互动.但是,这两个应用程序仍然是您可以独立管理的独立实体.