gpt4 book ai didi

asp.net-web-api - JSON 有效负载中带有 token 的 Web Api 授权过滤器

转载 作者:行者123 更新时间:2023-12-05 01:28:22 27 4
gpt4 key购买 nike

我一直在研究 AspNetWebApi 的授权,关于这个主题的信息有点少。

我有以下选择:

  • 在查询字符串上传递 API token
  • 将 API token 作为 header 传递
  • 使用基本身份验证传递 API token
  • 将 API token 传递到 json 中的请求负载上。

  • 通常推荐哪种方法?

    我也想知道第 4 点),我将如何检查 AuthorizationFilterAttribute 上 OnAuthorization 方法中的 json 有效负载以检查 API token 是否正确?

    最佳答案

    如果您想要一个真正安全的授权选项,那么像 OA​​uth 这样的方法是不错的选择。此 blog post使用现已过时的 WCF Web API 提供了一个非常全面的示例,但许多代码是可以挽救的。或者至少,使用 HTTP 基本身份验证,如此处所示 blog post .正如 Aliostad 所指出的,如果您使用基本身份验证路由,请确保您使用的是 HTTPS,以便 token 保持安全。

    如果您决定自己推出(这几乎总是比上面的任何一个选项安全得多),那么下面是一个代码示例,说明您在使用 HTTP header 路由时 AuthorizationHanlder 所需的内容。请注意,在 Web API 类中处理 UserPrinicipal 的方式很可能会发生变化,因此此代码仅适用于第一个预览版。您需要像这样连接 AuthorizationHandler:

        GlobalConfiguration.Configuration.MessageHandlers.Add(new AuthenticationHandler());

    header token 的代码:
    public class AuthenticationHandler : DelegatingHandler
    {
    protected override Task<HttpResponseMessage> SendAsync(
    HttpRequestMessage request,
    CancellationToken cancellationToken)
    {
    var requestAuthTokenList = GetRequestAuthTokens(request);
    if (ValidAuthorization(requestAuthTokenList))
    {
    //TODO: implement a Prinicipal generator that works for you
    var principalHelper = GlobalConfiguration.Configuration
    .ServiceResolver
    .GetService(typeof(IPrincipalHelper)) as IPrincipalHelper;

    request.Properties[HttpPropertyKeys.UserPrincipalKey] =
    principalHelper.GetPrinicipal(request);

    return base.SendAsync(request, cancellationToken);
    }
    /*
    ** This will make the whole API protected by the API token.
    ** To only protect parts of the API then mark controllers/methods
    ** with the Authorize attribute and always return this:
    **
    ** return base.SendAsync(request, cancellationToken);
    */
    return Task<HttpResponseMessage>.Factory.StartNew(
    () => new HttpResponseMessage(HttpStatusCode.Unauthorized)
    {
    Content = new StringContent("Authorization failed")
    });
    }

    private static bool ValidAuthorization(IEnumerable<string> requestAuthTokens)
    {
    //TODO: get your API from config or however makes sense for you
    var apiAuthorizationToken = "good token";
    var authorized = requestAuthTokens.Contains(apiAuthorizationToken);

    return authorized;
    }

    private static IEnumerable<string> GetRequestAuthTokens(HttpRequestMessage request)
    {
    IEnumerable<string> requestAuthTokens;
    if (!request.Headers.TryGetValues("SomeHeaderApiKey", out requestAuthTokens))
    {
    //Initialize list to contain a single not found token:
    requestAuthTokens = new[] {"No API token found"};
    }
    return requestAuthTokens;
    }
    }

    关于asp.net-web-api - JSON 有效负载中带有 token 的 Web Api 授权过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10434389/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com