首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mvc 4中保护我的web api

问如何在mvc 4中保护我的web api
EN

Stack Overflow用户
提问于 2017-06-29 14:41:18
回答 2查看 838关注 0票数 0

http://localhost:1075/api/customer/Getcustomer?id=1

1.一个url获取永久用户配置文件信息的结果..下面是为android application.but调用并设计的控制器code.This web api,即使我通过浏览器或邮递员工具调用它,它也会给出结果。那么安全在哪里??如果任何人知道这个网址,那么他就可以访问我们所有的敏感信息。请建议我如何保护我的web api...

代码语言:javascript
复制
 public customerCollection Getcustomer(int id)
        {          
            db.Configuration.ProxyCreationEnabled = false;
            var customer = (from c in db.customers
                                 where c.customerID == id
                                 select c).ToArray();
            var result = new customerCollection();
            if (customer == null)
            {
                result.status = "failed";
            }
            result.status = "success";
            result.customerArray = customer;
            return result;
        }

回应是

代码语言:javascript
复制
{
  "customerArray": [
    {
      "customerID": 1,
      "cname": "Yogesh",
      "cmobile": "9970714878",
      "cemail": "yogeshkhurpe11@gmail.com",
      "cpassword": "yogesh",
      "addressLine1": "balaji hostel",
      "addressLine2": "Jadhav nagar",
      "area": "Vadgoan",
      "pincode": "411041",
      "cimage": "Na",
      "cdate": "2017-06-28T14:16:03",
      "cstatus": "active",
      "orders": []
    }
  ],
  "status": "success"
}
EN

回答 2

Stack Overflow用户

发布于 2017-06-29 15:09:02

下面是使用身份验证的逐步方法。

您应该在WebAPI中创建一个Authorize属性,以便首先对传入的请求进行授权。

首先,将使用您的API的用户将使用用户名和密码对自己进行身份验证,一旦此过程完成,并且用户已获得授权,您应该向用户返回一个令牌,以供进一步请求。此令牌可以是加密的时间或GUID或任何您希望了解的有关特定用户的信息,即您为其生成该令牌的用户。您可以将该令牌保存到数据库中以供将来使用。

现在,当用户下次尝试访问您的API时,他将在该api请求的标头部分中发送令牌。如果令牌有效,则应返回结果,否则应返回一个错误,说明令牌无效。

谢谢,希望这对你有帮助!

票数 0
EN

Stack Overflow用户

发布于 2017-06-29 15:16:40

尝试以下逻辑。首先,在WebAPI中创建一个Authorize属性。使用api函数上面的Authorize属性来保护api

代码语言:javascript
复制
public class AuthenticationFilter : AuthorizationFilterAttribute
        {
            /// <summary>
            /// read requested header and validated
            /// </summary>
            /// <param name="actionContext"></param>
            public override void OnAuthorization(HttpActionContext actionContext)
            {
                var identity = FetchFromHeader(actionContext);

                if(identity != null)
                {
                    //get the user based on the identity
                    var user=TokenService.getUserFromToken(identity);
                    if (user)
                    {
                        CurrentThread.SetPrincipal(new GenericPrincipal(new GenericIdentity(user), null), null, null);
                    }
                    else
                    {
                        actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
                        return;
                    }
                }
                else
                {
                    actionContext.Response = new HttpResponseMessage(HttpStatusCode.BadRequest);
                    return;
                }
                base.OnAuthorization(actionContext);
            }

            /// <summary>
            /// retrive header detail from the request 
            /// </summary>
            /// <param name="actionContext"></param>
            /// <returns></returns>
            private string FetchFromHeader(HttpActionContext actionContext)
            {
                string requestToken = null;

                var authRequest = actionContext.Request.Headers.Authorization;
                if (authRequest != null && !string.IsNullOrEmpty(authRequest.Scheme) && authRequest.Scheme == "Basic")
                    requestToken = authRequest.Parameter;

                return requestToken;
            }
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44818043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档