标签: custom-authentication

在MVC3中使用自定义IPrincipal和IIdentity

创建我自己的IPrincipal,并IIdentity实现如下图所示:

[ComVisible(true)]
[Serializable]
public sealed class CustomIdentity : IIdentity {

    private readonly string _name;
    private readonly string _email;
    // and other stuffs

    public CustomIdentity(string name) {
        _name = name.Trim();
        if(string.IsNullOrWhiteSpace(name))
            return;
        _email = (connect to database and read email and other stuffs);
    }

    public string Name {
        get { return _name; }
    }

    public string Email {
        get { return _email; }
    }

    public string AuthenticationType {
        get { return "CustomIdentity"; }
    }

    public bool IsAuthenticated …
Run Code Online (Sandbox Code Playgroud)

forms-authentication iprincipal iidentity custom-authentication asp.net-mvc-3

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

AWS API Gateway自定义Authorizer奇怪显示错误

以下是上下文:

  • 我在API网关中设置了一个资源./用户/企业
  • 该资源有2种方法.获取并发布.
  • 我为此资源配置了自定义授权程序.

问题:

  • 我可以通过发送正确的授权信息来调用GET方法,并按预期获得结果.
  • 我尝试发送POST请求,我收到以下错误:

{
  "message": "User is not authorized to access this resource"
}
Run Code Online (Sandbox Code Playgroud)

  • 如果我等待几分钟,然后调用POST方法,它将工作.
  • 如果在调用POST方法并获得结果后我调用GET方法,它将显示与上面提到的相同的错误.

另外,我已经为授权者禁用了缓存.

在此输入图像描述

可能是什么导致了这个问题?

custom-authentication aws-api-gateway

12
推荐指数
2
解决办法
4310
查看次数

使用自定义身份验证自定义AuthorizeAttribute

我使用ASP.NET MVC 4 Web应用程序作为一些WCF服务的前端.所有用户登录/注销和会话控制都在后端完成.MVC应用程序应该只存储具有会话ID的单个cookie.我的客户端不允许使用表单身份验证,所有内容都必须自定义.

我在web.config中设置了以下内容:

  <system.web>
...
    <authentication mode="None" />
  </system.web>

  <system.webServer>
    <modules>
...
      <remove name="FormsAuthentication" />
...    
    </modules>
  </system.webServer>
Run Code Online (Sandbox Code Playgroud)

我还有一个全局过滤器:

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        // Force all actions to request auth. Only actions marked with [AllowAnonymous] will be allowed.
        filters.Add(new MyAuthorizeAttribute());
    }
}
Run Code Online (Sandbox Code Playgroud)

在Global.asax中调用

   FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
Run Code Online (Sandbox Code Playgroud)

我用[AllowAnonymous]标记了每个不需要授权的控制器和操作.

现在我必须实现MyAuthorizeAttribute.我尝试了一些教程,但没有一个完全符合我的场景.

基本上,我必须为每个操作处理以下方案:

  1. 如果存在有效的cookie,则应将当前请求视为已授权(不会检查任何角色,只有一种用户).
  2. 如果没有cookie,我应该覆盖默认的MVC处理程序(尝试加载帐户/登录)并将用户重定向到Home/Index页面,并显示用户应该登录的消息.
  3. 如果WCF方法调用抛出FaultException我们的自定义SecurityFault说会话已经过期(SecurityFault有一个包含异常原因的自定义枚举字段),我应该销毁我的自定义会话cookie并再次将用户重定向到Home/Index页面用户应该登录的消息,因为他的上一个会话已过期.对于所有其他SecurityFaults,我可以让它们通过 - 我有一个全局错误处理程序.

据我所知,我需要覆盖AuthorizeCore(检查我的cookie以查看会话是否存在且仍然有效)和HandleUnauthorizedRequest(将用户重定向到Home/Index而不是默认的Login页面).

对于重定向,我试过:

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {            
        base.HandleUnauthorizedRequest(filterContext);
        filterContext.Result = new RedirectResult("/Home/Index/NeedsLogin");
    }
Run Code Online (Sandbox Code Playgroud)

这似乎处理第二个罚款的情况(我不确定那个基本呼叫,但它是否需要?).

对于第一种情况,我需要实现AuthorizeCore.我不确定,如何正确地做到这一点.我已经看到AuthorizeAttribute有一些代码用于处理缓存情况,也许还有更多隐藏的功能,我不想打破它.

对于第三种情况,我不确定MyAuthorizeAttribute是否能够处理它.AuthorizeAttribute可以捕获Action内部发生的异常,或者我必须在我的全局错误处理程序中处理SecurityFault.SessionExpired情况吗?

asp.net-mvc authorize-attribute custom-authentication

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

AWS API网关自定义授权程序AuthorizerConfigurationException

对于Kinesis流,我使用AWS API Gateway创建了代理API.我使用python Lambda为代理添加了一个自定义授权程序.在发布lambda函数和部署API之后,我能够使用Gateway Test功能成功测试API.我可以看到cloudwatch中的日志,其中包含来自自定义auth lambda函数的详细打印.成功验证后,API Gateway将记录推送到我的Kinesis流

但是当我从Chrome Postman客户端调用相同的API时,我得到500内部服务器错误,响应头包括X-Cache→来自cloudfront的错误,x-amzn-ErrorType→AuthorizerConfigurationException

Lambda auth函数返回允许对我的API执行请求的策略.返回的政策文件是:

            {
              "policyDocument": {
                "Version": "2012-10-17",
                "Statement": [
                  {
                    "Action": "execute-api:Invoke",
                    "Resource": [
                      "arn:aws:execute-api:us-east-1:1234567:myapiId/staging/POST/*"
                    ],
                    "Effect": "Allow"
                  }
                ]
              },
              "principalId": "Foo"
            }

为什么请求会因Chrome或curl而失败,但API网关的相同API测试工作正常?

amazon-web-services custom-authentication aws-lambda aws-api-gateway

9
推荐指数
3
解决办法
9359
查看次数

Asp.Net Web Api基于令牌的授权,没有OWIN和AspNet.Identity

我打算使用下面的代码来实现我的web api安全性,但我不确定这是否足够安全和​​合理.我不想使用OWIN和AspNet.Identity,因为它对我来说非常复杂,我不完全理解,我不知道我如何定制数据库表,用户角色等.但我的方式很简单,非常可定制我.

这是CustomAuthorizeAttribute;

public class CustomAuthorize : AuthorizeAttribute
{
    public override void OnAuthorization(HttpActionContext actionContext)
    {
        if ((actionContext.Request.Headers.GetValues("Host").FirstOrDefault().Contains("localhost:15742")))
        {
            IEnumerable<string> access_token;
            if (actionContext.Request.Headers.TryGetValues("Authorization", out access_token))
            {
                var user = GetUserByToken(access_token);
                if (user!=null && !user.TokenIsExpired)
                {
                    HttpContext.Current.Response.AddHeader("WWW-Authenticate", "Custom " + access_token.FirstOrDefault());
                    return;
                }
                else
                {
                    actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
                    HttpContext.Current.Response.AddHeader("WWW-Authenticate", "Custom");
                    return;
                }
            }
            else
            {
                actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
            }
        }
        else
        {
            actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Forbidden);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是前端使用

<script type="text/javascript">
    $(function () {
        var access_token = $.cookie('access_token');
        if (access_token == undefined) …
Run Code Online (Sandbox Code Playgroud)

asp.net restful-authentication authorize-attribute custom-authentication asp.net-web-api

8
推荐指数
1
解决办法
3540
查看次数

Overriden HandleUnauthorizedAsync不被称为.NET Core

我已经实现了自己的自定义身份验证中间件和处理程序,并在应用启动时配置了它们.这一切都很好.

在我的自定义auth处理程序中,我已经覆盖了HandleAuthenticateAsync()以执行我自己的自定义身份验证,我还重写了HandleUnauthorizedAsync()以便将用户重定向到登录页面,但是这不会被调用.

浏览器在响应中收到401(未授权).我期待调用我的HandleUnauthorizedAsync().

我在这里没有正确理解管道吗?

谢谢

.net unauthorized custom-authentication asp.net-core

8
推荐指数
3
解决办法
1354
查看次数

为会话设置HttpContext.User

我在ASP.NET MVC中实现了自定义身份验证.如果有效用户尝试登录,我HttpContext.User = user在AccountController的Logon方法中设置.但它仍然存在于那个请求.如何为会话设置它?

我用了另一种方法HttpContext.Session["CurrentUser"] = user.如果我想看看会话是否被授权,我必须检查一下HttpContext.User != null.但是,我不想在应用程序的任何地方公开身份验证逻辑.如果我需要改变它,那就太乱了.

请帮我解决这个问题.一个解决方案可能是使用开头HttpContext.User的值填充每个请求的属性HttpContext.Session["CurrentUser"],但我不知道如何做到这一点.

asp.net-mvc custom-authentication

7
推荐指数
2
解决办法
8794
查看次数

每个阶段更改我的 AWS API Gateway 自定义授权者

我目前有一个 API 通过我们的 API 网关,该网关附加了多个自定义授权者 -LiveAuthorizerTestAuthorizer.

我想根据正在访问的阶段更改我的自定义授权者,就像阶段变量一样。如果我们处于阶段测试,请使用TestAuthorizer,如果处于现场使用LiveAuthorizer

从我的研究和本页来看,这似乎不可能,有什么想法吗?

PS - 我知道这可以在执行身份验证的 Lambda 函数内处理,我只是好奇是否有另一种方法(类似于阶段变量)。

amazon-web-services custom-authentication aws-lambda aws-api-gateway

7
推荐指数
1
解决办法
3835
查看次数

自定义身份验证asp.net核心web api

我想使用一个秘密密钥(api密钥)授权asp.net核心web api.密钥将在Authorization标头中传递,如下所示,

ex. Authorization keytype;h43484344343bbhfdjfdfhj34343
Run Code Online (Sandbox Code Playgroud)

我想编写一个中间件来从请求头读取此密钥,并调用内部api来验证密钥.

在web api中,我们可以编写一个消息处理程序来执行此操作,但我是asp.net核心的新手.我看到了很多样本​​,但他们正在使用内置的JWT令牌认证.但是我想使用自己的密钥并解密此密钥并对数据库条目进行验证.

任何人都可以建议一些代码示例如何做到这一点?

custom-authentication asp.net-web-api asp.net-core-webapi

7
推荐指数
1
解决办法
3635
查看次数

AWS API网关自定义授权程序日志

如何在API网关中从自定义授权器lambda函数获取日志记录?我不想为API启用日志记录.我需要从授权者lambda函数中记录.我使用python lambda函数并在代码中打印.我想在Cloud Watch日志中查看打印件.但是在云计算中看不到日志.我也没有得到错误.我错过了什么?
Lambda具有执行角色角色/ service-role/MyLambdaRole.此角色具有写入云监视的策略.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "logs:CreateLogGroup",
            "Resource": "arn:aws:logs:us-east-1:123456:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:us-east-1:123456:log-group:MyCustomAuthorizer:*"
            ]
        }
    ]
}

我还通过将CloudWatchLogsFullAccess策略添加到role/service-role/MyLambdaRole角色来测试.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "logs:*"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

amazon-web-services custom-authentication aws-lambda aws-api-gateway

6
推荐指数
1
解决办法
1120
查看次数