我有
FormsAuthentication.SetAuthCookie("someName", True)
Run Code Online (Sandbox Code Playgroud)
作为我的自定义登录序列的一部分.后来,我有一些页面只允许一个特定的角色:
<location path="myPage.aspx">
<system.web>
<authorization>
<allow roles="SomeRole"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
Run Code Online (Sandbox Code Playgroud)
据我所知,这会调用我的角色提供程序的GetRolesForUser实现.它似乎从Web.HttpContext.Current.User.Identity.Name获取用户名参数.
我的问题是...... 来自auth cookie的用户名何时被设置为我当前用户身份中的名称?
我正在开发一个具有严格安全和审计要求的Web应用程序(HIPPA的东西).因此,我们正在评估是否应该建立自己的自定义成员资格和角色提供商,或者是否有可以购买的商用组件.
如果您对第三方Asp.Net会员和角色提供商有任何经验(好的或坏的),请分享您的想法.
更新:我们已开始评估以下第三方组件:
Port Sight Secure Access:http: //www.portsight.com/Products.aspx? AliasPath = Products/Secure Access/Secure Access&CultureAlias = en-US
和Visual Guard:http: //www.visual-guard.com/
有人知道任何其他第三方组件或有这些经验吗?
HttpContext.Current.User.IsInRole 在AuthenticateRequest中不可用; 但是,Roles.IsUserInRole可用.
是因为在AuthenticateRequest之后将新的GenericPrincipal分配给HttpContext.Current.User?有人可以解释一下吗?感谢您的帮助!
void Application_AuthenticateRequest(object sender, EventArgs e)
{
if(HttpContext.Current.Request.IsAuthenticated)
{
// Return False
bool result1 = HttpContext.Current.User.IsInRole("Administrators");
// Return True
bool result2 = Roles.IsUserInRole("Administrators");
}
}
Run Code Online (Sandbox Code Playgroud) membership asp.net-membership roleprovider membership-provider
我有一个Symfony2应用程序,可从in_memory用户提供程序加载用户。该security.yml如下:
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
in_memory:
users:
admin: { password: mypassword, roles: [ 'ROLE_ADMIN' ] }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login:
pattern: ^/demo/secured/login$
security: false
secured_area:
pattern: ^/
anonymous: ~
http_basic:
realm: "MyApp Realm - Login"
access_control:
#- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
#- { path: ^/_internal, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }
- { path: ^/subscription/show, roles: ROLE_ADMIN }
- { path: ^/send, …Run Code Online (Sandbox Code Playgroud) 希望这不是一个愚蠢的问题.我一直在寻找两天来模拟我的行为上的system.web.security.roles的调用.
我希望我的单元测试是隔离的,不需要调用外部资源,例如角色得到存储的数据库.
我发现的所有答案都建议创建一个自定义角色提供者,但我更喜欢模仿假货的创建.
我得到的最接近的是这个解决方案 但我没有找到一种方法让ninject在测试之外运行项目时将默认角色Provider传递给构造函数.
我知道Mock类型为此提供了一个更简单的解决方案,但我使用的是犀牛模拟,现在改变太晚了.
我浏览了10个文档,我正在做正确的事情,但我确信这是我遗漏的一个小细节.
我想使用自己的登录机制登录我的网站.登录机制位于Identity服务器中以进行单点登录.
但是我想在umbraco中使用公共访问功能,所以我在本地数据库中添加角色.通过更改配置文件
<roleManager enabled="true" defaultProvider="UmbracoRoleProvider">
<providers>
<clear />
<add name="UmbracoRoleProvider" type="rcsedWebServiceBLL.RCSEdRoleProvider" />
</providers>
</roleManager>
Run Code Online (Sandbox Code Playgroud)
并实施 RoleProvider
class RCSEdRoleProvider : RoleProvider
{
private string _ApplicationName = "UmbracoRoleProvider";
public override void AddUsersToRoles(string[] usernames, string[] roleNames)
{
throw new NotImplementedException();
}
public override string ApplicationName
{
get { return _ApplicationName; }
set
{
if(string.IsNullOrEmpty(value))
throw new ProviderException("ApplicationName Cacnnot be Empty");
if(value.Length > 0x100)
throw new ProviderException("provider application name too long");
_ApplicationName = value;
}
}
public override void CreateRole(string roleName)
{
throw …Run Code Online (Sandbox Code Playgroud) 我正在编写自定义角色提供程序,我需要以编程方式访问存储在web.config中的授权信息.网站的某些部分只能由某些角色访问.我想知道哪些角色可以访问某个页面和/或某个角色可以访问哪个页面.
我似乎无法想出这个.
我使用的是定制的IIdentity,并IPrincipal在我ASP.NET MVC通过应用EF 4.3作为expalined 这里(并按照接受的答案的解决方案).另外,我有一个习惯RoleProvider.在本地(使用IIS Express),它的工作原理.但现在,当我在真实主机上传应用程序时,似乎所有用户都在"admin"角色中!例如,我创建了一个不在角色中的用户"admin",但它可以访问所有受保护的页面(需要"admin"角色).例如Role.IsUserInRole总是回来true.你有什么想法吗?你能帮助我吗?我应该做什么设置IIS吗?
我正在尝试实现自定义角色提供程序,我找到了一个教程并遵循它.这是链接:http: //techbrij.com/custom-roleprovider-authorization-asp-net-mvc
当我尝试使用不存在的用户帐户登录时,不会显示错误消息.这是我目前的代码.
这是登录的代码:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid)
{
using (SampleDBEntities objContext = new SampleDBEntities())
{
var objUser = objContext.Users.FirstOrDefault(x => x.AppUserName == model.UserName && x.Password == model.Password);
if (objUser == null)
{
ModelState.AddModelError("LogOnError", "The user name or password provided is incorrect.");
}
else
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
ModelState.AddModelError("LogOnError", "The user name or password provided is incorrect.");
return …Run Code Online (Sandbox Code Playgroud) 大家早上好,
我试图在我的Web应用程序中实现我的自定义成员资格和角色提供程序,我已在IIS 7的实例中的默认网站下实现.我的Web应用程序在.NET 4应用程序池下运行.
但是,在设置相应的web.config后,我收到以下错误:
Parser Error Message: Default Role Provider could not be found.
Run Code Online (Sandbox Code Playgroud)
我在相应的Web应用程序的web.config的system.web部分中包含了以下代码块:
<membership defaultProvider="CustomMembershipProvider" userIsOnlineTimeWindow="20">
<providers>
<clear/>
<add name="CustomMembershipProvider" type="CustomProviders.CustomMembershipProvider,
CustomProviders, Version=3.0.0.0, Culture=neutral,
PublicKeyToken=3563615169617648" applicationName="/"/>
</providers>
</membership>
<roleManager enabled="true" defaultProvider="CustomRoleProvider">
<providers>
<clear/>
<add name="CustomRoleProvider" type="CustomProviders.CustomRoleProvider,
CustomProviders, Version=3.0.0.0, Culture=neutral,
PublicKeyToken=3563615169617648" applicationName="/"/>
</providers>
</roleManager>
Run Code Online (Sandbox Code Playgroud)
现在我已经看到各种解释如何解决我之前提到的错误.他们中的大多数人似乎都建议我在我的提供者块中添加标签.有些人似乎建议我从machine.config中删除角色管理器.有些人似乎还建议不要删除或添加任何内容.最后一种方法似乎并不能说明我的Web应用程序是从IIS而不是本地计算机运行的.
最后,我尝试了这些方法,但收效甚微.有人可以向我解释我怎么能通过这个错误?提前致谢!
roleprovider ×10
asp.net ×3
.net ×2
c# ×1
httpcontext ×1
httpmodule ×1
iidentity ×1
iis ×1
in-memory ×1
iprincipal ×1
membership ×1
mocking ×1
ninject ×1
security ×1
symfony ×1
umbraco ×1
umbraco7 ×1
unit-testing ×1