标签: claims-based-identity

如果没有将声明映射到AD帐户,如何执行WIF /声明模拟?

我需要在SharePoint 2010中为声明用户执行搜索模拟.为了说明这一点,我想首先说明如何使用Windows帐户,然后讨论Claims/WIF.

Windows帐户

我可以使用以下方法为"经典"Windows集成身份验证用户执行此操作:

WindowsImpersonationContext wic = null;
try
{  
    WindowsIdentity impersonatedUser = new WindowsIdentity("john.doe@mydomain");
    wic = impersonatedUser.Impersonate();

    // do impersonated work here...
    // in my case this is a SharePoint KeywordQuery
}
finally
{
    if (wic != null)
    {
        wic.Undo();
    }
}
Run Code Online (Sandbox Code Playgroud)

为了使上述功能得以实现,模拟帐户必须与当前用户位于同一个域中,我必须确保应用程序池所有者是:

  • 域中具有Windows 2003或更高版本"域功能级别"的域帐户
  • 在本地盒子上"充当操作系统的一部分"特权
  • 在本地方框上"在身份验证后模拟客户端"权限

(注意:如果有人可以弄清楚如何解决当前帐户必须与模拟帐户位于同一域中的问题,我很满意.)

索赔账户

我想对Claims/WIF帐户做同样的事情.这些帐户并不一定与AD帐户(我需要承担他们不是)相关联.

有没有办法告诉STS我想冒充某个特定帐户并为它提供该帐户的相应令牌?我没有我冒充用户的密码.

引用SharePoint Brew我必须应对在SharePoint Web前端(WFE)上运行的代码,该代码通过WCF调用调用查询处理器.我希望WCF调用位于模拟用户的上下文中.

WFE(Server1)搜索Web部件与服务应用程序代理进行通信.关联的搜索服务应用程序代理调用本地STS以获取用户的SAML令牌.收集SAML令牌后,搜索服务应用程序代理将通过WCF调用调用运行查询处理器的服务器.我将这个服务器称为"服务器2".服务器2接收传入请求并根据其本地STS验证SAML令牌.经过验证,Server 2连接到各种组件以收集,合并和安全性修剪搜索结果.服务器2将修剪后的搜索结果发送回服务器1,然后将其呈现给用户.

更多的研究使我看到ActAsOnBehalfOf.我相信我会想要使用OnBehalfOf,但我不确定是否会有效.我发现的一些参考文献列在下面.任何指导表示赞赏.

sharepoint claims-based-identity windows-identity wif

35
推荐指数
1
解决办法
3482
查看次数

MVC5(VS2012)标识CreateIdentityAsync - 值不能为null

我正在尝试为MVC5站点设置OAuth(在VS2012中).

我正在使用Fluent NHibernate.我已经设置了自己的Userstore并传入一个存储库对象来访问NHibernate会话对象.我将我的商店传递给默认的aspnet usermanager提供程序.这最终适用于本地注册和登录.我不是要设置连接/注册Facebook.

它获得了一个成功的帐户.在用户表中添加用户,在登录表中添加记录然后爆炸.我没有在用户存储中实现声明,或者在用户对象中放置声明集合.(不确定这是否真的需要,我正在剥离所有可能出错的东西以找到问题的根源).

爆炸的线是(在账户控制器中):

var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);            
Run Code Online (Sandbox Code Playgroud)

在这种方法中:

private async Task SignInAsync(IdentityUser user, bool isPersistent)
Run Code Online (Sandbox Code Playgroud)

这是堆栈跟踪的结束

[ArgumentNullException: Value cannot be null.
Parameter name: value]
   System.Security.Claims.Claim..ctor(String type, String value, String valueType, String issuer, String originalIssuer, ClaimsIdentity subject, String propertyKey, String propertyValue) +14108789
   System.Security.Claims.Claim..ctor(String type, String value, String valueType) +62
   Microsoft.AspNet.Identity.<CreateAsync>d__0.MoveNext() +481
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +144
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +84
   System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +49
   Web.Controllers.<SignInAsync>d__42.MoveNext() in d:\Google Drive\Development\GoalManagement\Web\Controllers\AccountController.cs:375
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +144
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +84
   Web.Controllers.<ExternalLoginConfirmation>d__35.MoveNext() in d:\Google Drive\Development\GoalManagement\Web\Controllers\AccountController.cs:311
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +144 …
Run Code Online (Sandbox Code Playgroud)

asp.net identity claims-based-identity asp.net-mvc-5 asp.net-identity

34
推荐指数
4
解决办法
2万
查看次数

服务器端声称使用Owin身份验证进行缓存

我有一个过去常用的应用程序,FormsAuthentication不久之前我将其切换为使用IdentityModelfrom,WindowsIdentityFramework以便我可以从基于声明的身份验证中受益,但使用和实现它相当难看.所以现在我在看OwinAuthentication.

我在看OwinAuthenticationAsp.Net Identity框架.但是Asp.Net Identity框架目前唯一的实现是使用EntityModel和我正在使用nHibernate.所以现在我想尝试绕过Asp.Net Identity并直接使用Owin Authentication.我终于能够使用" 我如何忽略身份框架魔法并使用OWIN auth中间件来获取我所寻求的声明? "中的提示进行工作登录,但现在我持有声明的cookie相当大.当我使用时,IdentityModel我能够使用服务器端缓存机制来缓存服务器上的声明,而cookie只是为缓存的信息保存了一个简单的令牌.是否有相似的功能OwinAuthentication,或者我必须自己实现它?

我希望我会参加其中一艘船......

  1. cookie保持3KB,哦,它有点大.
  2. 启用类似于IdentityModelSessionCaching的功能Owin,我不知道.
  3. 编写我自己的实现来缓存导致cookie膨胀的信息,看看我是否可以Owin在应用程序启动时配置它.
  4. 我这样做是错的,有一种我没有想过的方法,或者我在滥用某些东西Owin.

    public class OwinConfiguration
    {
        public void Configuration(IAppBuilder app)
        {
            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = "Application",
                AuthenticationMode = AuthenticationMode.Active,
                CookieHttpOnly = true,
                CookieName = "Application",
                ExpireTimeSpan = TimeSpan.FromMinutes(30),
                LoginPath = "/Login",
                LogoutPath = …
    Run Code Online (Sandbox Code Playgroud)

asp.net authentication claims-based-identity owin

32
推荐指数
2
解决办法
1万
查看次数

如何使用Windows Active Directory身份验证和基于身份的声明?

问题

我们希望使用Windows Active Directory对用户进行应用程序身份验证.但是,我们不希望使用Active Directory组来管理控制器/视图的授权.

据我所知,没有一种简单的方法可以将AD和基于身份的声明结合起来.

目标

  • 使用本地Active Directory对用户进行身份验证
  • 使用Identity框架来管理声明

尝试(失败)

  • Windows.Owin.Security.ActiveDirectory - Doh.这适用于Azure AD.没有LDAP支持.他们可以将其称为AzureActiveDirectory吗?
  • Windows身份验证 - 使用NTLM或Keberos身份验证时可以.问题始于:i)令牌和索赔都由AD管理,我无法弄清楚如何使用身份声明.
  • LDAP - 但这些似乎迫使我手动进行表单身份验证以使用身份声明?当然必须有一个更简单的方法吗?

任何帮助都不仅仅是值得赞赏的.我已经坚持这个问题很长一段时间了,并且会对这个问题的外部投入表示赞赏.

authentication claims-based-identity asp.net-identity visual-studio-2015 asp.net-core

29
推荐指数
3
解决办法
3万
查看次数

如何为Asp.NET MVC 5创建一个ClaimsIdentity对象?

我在.NET MVC 5应用程序中工作.我不想使用Entity Framework.我想验证RavenDB数据库.在我看来,我想要替换UserManager帐户控制器附带的.我想我可以重写所有UserManager函数来使用我的数据库,除了我不理解该ClaimsIdentity对象.

在该SignInAsync方法中,有一个调用UserManager.CreateIdentityAsync(...).我知道它会返回一个ClaimsIdentity对象.我不知道的是如何自己创建一个ClaimsIdentity对象.

我看到它有4个属性Actor,BootstrapContext,ClaimsLabel.我不知道这些属性用于什么,我不知道如何正确生成它们.我认为正确生成它们非常重要,因为它是如何生成身份验证cookie的.

我在这里查看了ClaimsIdentity对象的解释,但这并没有真正帮助我理解.

如果我能看到代码CreateIdentityAsync(),那可能会有所帮助.

如果我发现这一切都错了,请告诉我.否则,如果有人可以指出我如何生成ClaimsIdentity对象,那将会有所帮助.

ClaimsIdentity identity = new ClaimsIdentity
{
    Actor = ????,
    BootstrapContext = ?????,
    Claims = ?????,
    Label = ?????
}
Run Code Online (Sandbox Code Playgroud)

authentication claims-based-identity ravendb katana asp.net-mvc-5

27
推荐指数
4
解决办法
4万
查看次数

Azure 中服务主体和托管标识之间的区别

我想知道是否总是建议在 Azure 中使用托管身份,主要是系统分配或服务主体?与托管标识相比,何时应在 Azure 中使用服务主体,两者相比有什么优势?任何帮助,将不胜感激。

azure claims-based-identity azure-active-directory

25
推荐指数
4
解决办法
2万
查看次数

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

我正在制作一个开发人员工具来模仿RolesIntranet站点,以便开发人员能够Role根据需要快速执行任何操作.定义的角色Developer, Team Lead, Team Member, Engineering, Marketing, Guest,并在网页上的工具向Web API的调用来添加或删除的Claim...好,我可以添加,但似乎无法找出的.RemoveClaim(claim).TryRemoveClaim(claim)可以访问得到这个工作.我是否必须创建自定义声明管理器才能获得此功能,或者我是否遗漏了某些内容?

我一直在关注System.Security.Claims,几乎所有其他东西似乎都非常简单,并且没有任何参考需要大量工作来完成我需要的工作.

我在.NET 4.5.1中使用VS 2013/Web Api2.

网站方面只是使用简单的ajax调用PUTDELETE功能,直到我按照我想要的方式工作.从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));
        user.AddIdentity(claimId);
    }

    // DELETE api/devroleadjuster/5
    public void Delete(int id, [FromBody]string role)
    {
        var claim = FindClaim(role); …
Run Code Online (Sandbox Code Playgroud)

c# claims-based-identity wif asp.net-web-api

24
推荐指数
2
解决办法
2万
查看次数

ClaimsPrincipal的作用是什么,为什么它有多个身份?

我试图基于应用程序(依赖方)的声明来理解.NET背后的安全模型.

我知道有两大类:

  • ClaimsPrincipal - 正在运行的进程的安全上下文
  • IdentityPrincipal - 存储有关用户的信息 - 身份验证状态和声明

ClaimsPrincipal只包含一组身份和指向当前使用的身份,但据我所知,主体通常永远不会包含多于1个身份,即使它会 - 但用户从未登录过2个或更多身份.

对我来说,ClaimsPrincipal,除了使用它来获得当前的身份,原谅我的无知,它是无用的.

除了我所陈述的内容之外我还缺少什么,让我们说一下与ClaimsPrincipal类相关的向后兼容性?

.net c# authentication claims-based-identity wif

24
推荐指数
3
解决办法
8851
查看次数

ASP.NET MVC 2和使用WIF进行身份验证(Windows Identity Foundation)

是否有以下可用的例子:

浏览WIF SDK,有一些使用WIF与ASP.NET结合使用的示例,使用它WSFederationAuthenticationModule (FAM)来重定向到用户用来进行身份验证的安全令牌服务(STS)之上的ASP.NET站点瘦皮肤(通过提供用户名)和密码).

如果我正确理解WIF和基于声明的访问,我希望我的应用程序提供自己的登录屏幕,用户可以在其中提供用户名和密码,并将此委托给STS进行身份验证,通过安全标准将登录详细信息发送到端点(WS-*),并期望返回SAML令牌.理想情况下,按照结合SessionAuthenticationModule使用的示例工作FAM, SessionAuthenticationModule即负责重建IClaimsPrincipal会话安全分块cookie并在安全会话到期时重定向到我的应用程序登录页面.

我所描述的可能是使用FAMSessionAuthenticationModule使用适当的web.config设置,还是我需要考虑写一个HttpModule自己来处理这个?或者,是否重定向到瘦网站STS,用户在被动请求方案中登录事实上的方法?

authentication asp.net-mvc claims-based-identity wif

23
推荐指数
2
解决办法
2万
查看次数

声明与OAuth之间的区别

基于声明的身份验证与OAuth提供的内容之间有什么区别.

我正在寻找概念上的差异,而不是技术差异.我什么时候选择声明而不是OAuth,反之亦然.

基于声明的身份验证由Microsoft提出,并构建在WS-Security之上.但OAuth更像是一种开源协议,它被提议允许基于安全令牌从不同的门户获取资源.

声明还具有令牌的概念(SAML编码或X509证书).

我想知道我什么时候选择声明而不是OAuth,反之亦然.

谢谢

oauth claims-based-identity

23
推荐指数
1
解决办法
1万
查看次数