我需要在SharePoint 2010中为声明用户执行搜索模拟.为了说明这一点,我想首先说明如何使用Windows帐户,然后讨论Claims/WIF.
我可以使用以下方法为"经典"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)
为了使上述功能得以实现,模拟帐户必须与当前用户位于同一个域中,我必须确保应用程序池所有者是:
(注意:如果有人可以弄清楚如何解决当前帐户必须与模拟帐户位于同一域中的问题,我很满意.)
我想对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,然后将其呈现给用户.
更多的研究使我看到ActAs和OnBehalfOf.我相信我会想要使用OnBehalfOf,但我不确定是否会有效.我发现的一些参考文献列在下面.任何指导表示赞赏.
我正在尝试为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
我有一个过去常用的应用程序,FormsAuthentication
不久之前我将其切换为使用IdentityModel
from,WindowsIdentityFramework
以便我可以从基于声明的身份验证中受益,但使用和实现它相当难看.所以现在我在看OwinAuthentication
.
我在看OwinAuthentication
和Asp.Net Identity
框架.但是Asp.Net Identity
框架目前唯一的实现是使用EntityModel
和我正在使用nHibernate
.所以现在我想尝试绕过Asp.Net Identity
并直接使用Owin Authentication
.我终于能够使用" 我如何忽略身份框架魔法并使用OWIN auth中间件来获取我所寻求的声明? "中的提示进行工作登录,但现在我持有声明的cookie相当大.当我使用时,IdentityModel
我能够使用服务器端缓存机制来缓存服务器上的声明,而cookie只是为缓存的信息保存了一个简单的令牌.是否有相似的功能OwinAuthentication
,或者我必须自己实现它?
我希望我会参加其中一艘船......
IdentityModel
SessionCaching的功能Owin
,我不知道.Owin
在应用程序启动时配置它.我这样做是错的,有一种我没有想过的方法,或者我在滥用某些东西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)我们希望使用Windows Active Directory对用户进行应用程序身份验证.但是,我们不希望使用Active Directory组来管理控制器/视图的授权.
据我所知,没有一种简单的方法可以将AD和基于身份的声明结合起来.
任何帮助都不仅仅是值得赞赏的.我已经坚持这个问题很长一段时间了,并且会对这个问题的外部投入表示赞赏.
authentication claims-based-identity asp.net-identity visual-studio-2015 asp.net-core
我在.NET MVC 5应用程序中工作.我不想使用Entity Framework.我想验证RavenDB数据库.在我看来,我想要替换UserManager
帐户控制器附带的.我想我可以重写所有UserManager函数来使用我的数据库,除了我不理解该ClaimsIdentity
对象.
在该SignInAsync
方法中,有一个调用UserManager.CreateIdentityAsync(...)
.我知道它会返回一个ClaimsIdentity
对象.我不知道的是如何自己创建一个ClaimsIdentity对象.
我看到它有4个属性Actor
,BootstrapContext
,Claims
和Label
.我不知道这些属性用于什么,我不知道如何正确生成它们.我认为正确生成它们非常重要,因为它是如何生成身份验证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
我想知道是否总是建议在 Azure 中使用托管身份,主要是系统分配或服务主体?与托管标识相比,何时应在 Azure 中使用服务主体,两者相比有什么优势?任何帮助,将不胜感激。
我正在制作一个开发人员工具来模仿Roles
Intranet站点,以便开发人员能够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调用PUT
和DELETE
功能,直到我按照我想要的方式工作.从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) 我试图基于应用程序(依赖方)的声明来理解.NET背后的安全模型.
我知道有两大类:
ClaimsPrincipal只包含一组身份和指向当前使用的身份,但据我所知,主体通常永远不会包含多于1个身份,即使它会 - 但用户从未登录过2个或更多身份.
对我来说,ClaimsPrincipal,除了使用它来获得当前的身份,原谅我的无知,它是无用的.
除了我所陈述的内容之外我还缺少什么,让我们说一下与ClaimsPrincipal类相关的向后兼容性?
是否有以下可用的例子:
浏览WIF SDK,有一些使用WIF与ASP.NET结合使用的示例,使用它WSFederationAuthenticationModule (FAM)
来重定向到用户用来进行身份验证的安全令牌服务(STS)之上的ASP.NET站点瘦皮肤(通过提供用户名)和密码).
如果我正确理解WIF和基于声明的访问,我希望我的应用程序提供自己的登录屏幕,用户可以在其中提供用户名和密码,并将此委托给STS进行身份验证,通过安全标准将登录详细信息发送到端点(WS-*),并期望返回SAML令牌.理想情况下,按照结合SessionAuthenticationModule
使用的示例工作FAM
, SessionAuthenticationModule
即负责重建IClaimsPrincipal
会话安全分块cookie并在安全会话到期时重定向到我的应用程序登录页面.
我所描述的可能是使用FAM
和SessionAuthenticationModule
使用适当的web.config设置,还是我需要考虑写一个HttpModule
自己来处理这个?或者,是否重定向到瘦网站STS,用户在被动请求方案中登录事实上的方法?
基于声明的身份验证与OAuth提供的内容之间有什么区别.
我正在寻找概念上的差异,而不是技术差异.我什么时候选择声明而不是OAuth,反之亦然.
基于声明的身份验证由Microsoft提出,并构建在WS-Security之上.但OAuth更像是一种开源协议,它被提议允许基于安全令牌从不同的门户获取资源.
声明还具有令牌的概念(SAML编码或X509证书).
我想知道我什么时候选择声明而不是OAuth,反之亦然.
谢谢
wif ×4
asp.net ×2
c# ×2
.net ×1
asp.net-core ×1
asp.net-mvc ×1
azure ×1
identity ×1
katana ×1
oauth ×1
owin ×1
ravendb ×1
sharepoint ×1