使用没有身份的[授权]属性?

时间:2017-11-30 17:22:34

标签: c# asp.net-mvc identity

我环顾四周试图找到我的具体问题的答案。我基本上使用外部库来检查用户是否通过用户名和密码在我们的域中获得授权。

var authenticatedUser = ECNSecurity.SecurityChecker.AuthenticateUser(model.Username, model.Password);

无论用户是否,都返回true或false。我希望能够在我的一些控制器方法上使用[Authorize]属性。这可以在不使用Identity的情况下执行此操作吗?或者我是否需要获取Identity并创建我自己的继承Identity UserModel的用户?然后,当我将该用户标记为已通过身份验证时,会以某种方式获取[授权]属性吗?

我正在观看教程和阅读,但我确实有一个更具体的用例,我无法找到直接的答案。请原谅我在这个安全/授权领域缺乏经验,如果我问的话太傻了。也许我没有意识到的是[授权]属性只适用于身份用户。

非常感谢任何输入。谢谢。

2 个答案:

答案 0 :(得分:3)

如果您只希望授权过滤器工作,则不需要ASP.NET标识。

您只需要ASP.NET MVC中的 OWIN Cookie中间件 。如果需要,您还可以添加用户名等声明。

以下是您需要的几个步骤 -

Startup.cs

启动时配置OWIN Cookie中间件。

[assembly: OwinStartup(typeof(YourApplication.Startup))]
namespace YourApplication
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = "ApplicationCookie",
                LoginPath = new PathString("/Account/Login")
            });
        }
    }
}

OwinAuthenticationService

public class OwinAuthenticationService : IAuthenticationService
{
    private readonly HttpContextBase _context;
    private const string AuthenticationType = "ApplicationCookie";

    public OwinAuthenticationService(HttpContextBase context)
    {
        _context = context;
    }

    public void SignIn(User user)
    {
        IList<Claim> claims = new List<Claim>
        {
            new Claim(ClaimTypes.Name, user.UserName),
            new Claim(ClaimTypes.GivenName, user.FirstName),
            new Claim(ClaimTypes.Surname, user.LastName),
        };

        ClaimsIdentity identity = new ClaimsIdentity(claims, AuthenticationType);

        IOwinContext context = _context.Request.GetOwinContext();
        IAuthenticationManager authenticationManager = context.Authentication;

        authenticationManager.SignIn(identity);
    }

    public void SignOut()
    {
        IOwinContext context = _context.Request.GetOwinContext();
        IAuthenticationManager authenticationManager = context.Authentication;

        authenticationManager.SignOut(AuthenticationType);
    }
}

您可以在GitHub查看我的工作示例项目。

答案 1 :(得分:1)

要在.net框架版本的mvc中使用cookie进行授权,您只需使用以下

即可
FormsAuthentication.SetAuthCookie(UserName, remember);

remember是一个等同于&#34的布尔值;记住我&#34;选项。

如果需要How to hide Login fields from the logged user

,请在此处查看我的答案以获取更多信息