问题标签 [iprincipal]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
608 浏览

c# - 为什么 Resharper 认为 IPrincipal.Identity 永远不会为空?

在 VS2010 中运行的 Resharper 8 告诉我我可以删除检查principal.Identity != null

在此处输入图像描述

我假设这是因为 IPrincipal 的代码中有一个 NotNull 属性或潜伏的东西,但是编写自己的返回 null 标识的 IPrincipal 实现很容易:

Resharper 怎么知道传递给此方法的 IPrincipal 不会是我的返回 null 身份的 FooPrincipal 之一?

编辑:好的,这是一个完整的复制案例,Resharper 实际上鼓励您编写在生产中爆炸的代码......

以及来自 VS2010 的屏幕截图显示 Resharper 的“有用”突出显示......

在此处输入图像描述

果然,当你按下 F5 时,程序会抛出异常。我想说这可以回答我原来的问题“因为 Resharper 是错误的”:)

编辑 2:在http://youtrack.jetbrains.com/issue/RSRP-398551提交的 Resharper 错误报告

0 投票
1 回答
2519 浏览

c# - 使用 PrincipalContext 和 PrincipalSearcher 从单独的服务器访问 Active Directory 用户

我有以下代码来检索当前的活动目录用户:

我目前的情况如下:

  1. 我正在开发机器上工作,其中 ASP.NET MVC Web 应用程序和 Active Directory 都在同一台机器上。

  2. 我没有通过用户名和密码来获取 AD 用户。

因此,当我将包含上述代码的 ASP.NET MVC Web 应用程序移动到我的 UAT 服务器时,我有以下担忧:

  1. 在 UAT 服务器上,ASP.NET MVC Web 应用程序和 AD 将位于两台不同的机器上。
  2. 要从某台机器访问 AD,我可能需要向 AD 服务器发送用户名和密码。

如果出现以下情况,我的原始代码也会起作用:

  1. AD 和 ASP.NET MVC Web 应用程序在不同的机器上?
  2. 如果 AD 服务器需要同时传递用户名和密码?
0 投票
3 回答
2105 浏览

wcf - 异步 WCF 结束方法中的错误 Thread.CurrentPrincipal

我有一个 WCF 服务,它Thread.CurrentPrincipalServiceConfiguration.ClaimsAuthorizationManager.

当我像这样异步实现服务时:

我发现 Thread.CurrentPrincipal 在 Begin 方法和 WorkerFunction 中设置为正确的 ClaimsPrincipal,但在 End 方法中它设置为 GenericPrincipal。

我知道我可以为在所有方法中具有正确主体的服务和使用启用 ASP.NET 兼容性HttpContext.Current.User,但我宁愿不这样做。

有没有办法在不打开 ASP.NET 兼容性的情况下强制 Thread.CurrentPrincipal 使用正确的 ClaimsPrincipal?

0 投票
4 回答
35368 浏览

c# - 使用 MVC5 和 OWIN 的自定义身份

我尝试使用 MVC5 和 OWIN 身份验证为网站的 ApplicationUser 添加自定义属性。我已经阅读了https://stackoverflow.com/a/10524305/264607并且我喜欢它如何与基本控制器集成以轻松访问新属性。我的问题是,当我将 HTTPContext.Current.User 属性设置为我的新 IPrincipal 时,我得到一个空引用错误:

这是我的代码:

我没有找到太多关于如何做到这一点的文档,我已经阅读了这些文章:

http://blogs.msdn.com/b/webdev/archive/2013/10/16/customizing-profile-information-in-asp-net-identity-in-vs-2013-templates.aspx

http://blogs.msdn.com/b/webdev/archive/2013/07/03/understanding-owin-forms-authentication-in-mvc-5.aspx

第二个链接中的评论指出我可能使用声明(http://msdn.microsoft.com/en-us/library/ms734687.aspx?cs-save-lang=1&cs-lang=csharp),但文章链接to 没有显示如何将它们添加到IPrincipal(这是什么HttpContext.Current.User),或者您应该在管道中的哪个位置将它们添加到 a ClaimsIdentity(这是具体的类User)。我倾向于使用声明,但我需要知道在哪里向用户添加这些新声明。

即使索赔是要走的路,我也很好奇我的自定义 IPrincipal 做错了什么,因为我似乎已经实现了它所需的一切。

0 投票
1 回答
1975 浏览

c# - How to do ASP.NET Web API integration tests with custom authentication and in-memory hosting

A similar question has been answered here but the answer doesn't seem to work in my case.

I want to test the authentication/authorization process in my Web Api which is using a JWT authentication.

My authentication is handled through a custom MessageHandler that I add to my HttpConfiguration. Authorization in handled by a simple [Authorize] Attribute on Controller/Methods I want to restrict access to.

I'm setting the principal I've extracted from my token this way during authentication (in my custom MessageHandler):

This whole process is working fine when I test it manually in a local IIS.

But when testing with an in-memory hosting like here The ApiController.User property storing the Principal that is used for authorization with [Authorize] get the Thread.CurrentPrincipal in my calling test (the windows principal of my current session) instead of the one set during authentication. If I set my Thread.CurrentPrincipal to null, I get only bad requests.

TL;DR How do I test my authentication/authorization pipeline with in memory hosting ? As it sets the ApiController.User value to the Thread.CurrentPrincipal value in my test and not getting the one I set successfully during authentication.

I think I can manage to do a work around with implementing a custom [Authorize] Attribute getting the Thread.CurrentPrincipal and not the ApiController.User, but I'd like to avoid that.

Thanks in advance.

EDIT for clarification: all this pipeline (authentication then authorization) is working fine hosted in a running IIS (with an HttpContext which is null during in memory hosting). I'm just trying to test it with in memory hosting (if it is possible). During testing with in memory hosting , putting breakpoints in my custom MessageHandler, I can tell that the Thread.CurrentPrincipal is well set, it's just that [Authorize] doesn't seem to care about that, as, in my ApiControllers the ApiController.User property is already set to the value of my Thread.CurrentPrincipal value in my test (my local Windows session principal)

0 投票
1 回答
1750 浏览

c# - How to implement role-based authorization in WPF application calling database through WCF services?

I have a WCF service that send queries to a database using stored procedure. The WCF services are called with a WPF application where role-based authorization is implemented with IIdentity and IPrincipal. I want to use this role-based security to protect the WCF services, but I don't know how to proceed.

It's a bit of a mess in my head :) I read about Membership, RoleProvider... but don't really understand the difference and in what case to use these.

0 投票
1 回答
920 浏览

asp.net-mvc-3 - 更新:在 ReSharper 单元测试中将 HttpContext 和 IPrincipal 传递给 Controler

我正在尝试在 ASP MVC 控制器上运行几个基本单元测试,但是有一次控制器需要IPrincipal User像这样检查对象:

但是,一旦单元测试进入Create控制器方法,上面的行就会抛出 a NullReferenceExceptionas the Userobject is null

关于如何设置IPrincipal单元测试会话的任何想法?

这是我现在写的测试。我试图访问该User对象并在测试进入Create方法之前简单地设置它,但是智能感知没有拾取它。

编辑

在下面评论中提到的帖子之后,我找到了一种创建HttpContext会话并应用于IPrincipal该会话的方法。这工作正常,直到单元测试进入控制器,其中HttpContextIPrincipal User对象都再次为空。

由于似乎我正在使用的控制器实例的HttpContext属性为只读(以及该IPrincipal User属性),有没有人知道一种方法来传递HttpContext正在测试的控制器内的单元测试中使用的对象?另外,如果这是不可能的,那么RouteValues使用 ReSharper 的单元测试进行测试的可用方法是什么?

0 投票
1 回答
742 浏览

asp.net-mvc - 如何在 MVC 4、WinAPI 中创建自定义 iPrincipal

我遇到了在其他文章中找不到的情况。我正在设计一个 RESTful 服务器以供移动应用程序使用。在这种情况下,用户名和密码是应用调用标题的一部分,没有登录屏幕。

以下代码完成验证用户信息的工作,并且控制器具有安全控制。

我的问题是:如何在 ApiController 控制器中填充 iPrincipal?

我在 WebApiConfig.cs 创建了一个过滤器

tbAuthorize 的代码是:

问题是我无法访问 Response 中的 cookie,也没有找到填充 iPrincipal 的方法。

我需要在 this.User.Identity.Name 中有数据,如下所示:

谢谢你的帮助,

马可·卡斯特罗

0 投票
1 回答
2800 浏览

.net-4.5 - 您如何在可移植类库中使用 IPrincipal 和 IIdentity?

在 WIF(Windows Identity Foundation)4.5 中,Microsoft 创建了WindowsPrincipal该类,它是ClaimsPrincipal. 当然,这些类是不可移植的,但它们背后的接口是 ( IPrincipal)。实现接口的ClaimsIndentity类也是如此。IIdentity

我遇到的问题是这些类和 WIF 通常完全基于“声明”的概念,这太棒了……但是这两个接口IPrincipalIIdentity没有。不仅如此,ClaimsPrincipal该类还具有一组身份,而不仅仅是与其关联的单个身份。

  • IPrincipal 拥有IdentityIsInRole成员。
  • IIidentity 有AuthenticationTypeIsAuthenticatedName成员。

鉴于可移植类库只能访问这两个接口这一事实,如何获得实际声明?

此外,在主体具有多个身份的罕见情况下,如何获得“非主要”身份?

0 投票
1 回答
2597 浏览

c# - WCF PrincipalPermission 授权

我正在尝试在每个 wcf Web 方法上设置角色授权。

也许我做错了什么,但我无法获得授权。

我有一个 UserNamePasswordValidator 授权用户访问该服务。

然后授权策略获取用户角色并根据评估上下文设置主体。我已经用 GenericPrincipal 和我自己的 CustomPrincipal 进行了尝试。

但是,无论角色如何,始终执行 Web 方法。

授权策略

PrincipalPermission 如何链接到主体?

我的 CustomPrincipal 有一个 IsInRole 方法,我应该做其他事情来确保 PrincipalPermission 验证角色吗?