繁体   English   中英

如何将API访问限制为仅对我的应用程序?

[英]How do I restrict API access to only my application?

我已经创建了一个api,并为某些操作实现了JWT。 我遵循了一些教程,并成功地阻止了对非GET端点的未经授权的请求。 但是,每个教程似乎都涵盖了相同的概念:向用户提出请求。 也就是说,我正在获取他们的用户名/密码,请求一个令牌,验证该令牌,然后执行操作。

问题是我不希望公众能够向api发出GET请求。 我也不想让他们登录到应用程序,因为这是没有必要的。

我可能还会在网站上使用一些Ajax,但不确定是否会使事情复杂化。

我应该只使用“应用程序”用户名/密码发出每个请求吗? 还是有一种标准的方法来限制对应用程序的api请求?

查看您的方案,我想您肯定要考虑IdentityServer。

这将使您跳过OAuth2背后的大多数复杂性。 我见过很多人提到OAuth2流程过高,但这是一个标准,如果您花一些时间来理解它,那么您会发现实际上并不那么困难。

您的情况如何运作?

由于您不关心用户登录,因此您想使用应用程序身份验证。这意味着您将定义ClientID和ClientSecret组合,这将有助于识别一个应用程序。 如果您有多个应用程序,则只需创建更多组合。

您将向授权服务器发出初始请求,并在基本授权标头中传递ClientID和CLientSecret。

您将获得一个令牌,该令牌使您可以在定义的时间段内访问资源。 这次,您使用承载授权标题来访问资源,并使用从授权服务器收到的令牌。

基本上就是这样。 Taiseer的博客是一个很好的资源。 我强烈推荐它,因为这个人是Microsoft MVP,并且在这个特定领域已经做了很多工作。

我有一篇使用Identity v3的较旧文章。 现在已经过时了,但是它确实详细解释了所有内容,因此您可能也想看看一下:

安德烈的文章

我建议您不要使用任何自定义安全系统,因为这些系统没有经过严格的战斗,也没有在野外得到真正的证明。 暴露自己一个小错误很容易。

我们在这里谈论的似乎是根据用户的身份授权每个GET请求。

获得用户名和密码,请求令牌并验证令牌都是身份验证 在我看来,您下一步要做的就是授权,它涵盖了“用户可以做什么”。

为了授权请求,您需要一种机制来识别每个用户/每个用户组可以做什么和不能做什么,并在单独的GET端点处进行查询,以确定是否应允许该用户发出请求,以及是否允许该用户返回请求。适当的403禁止响应。

在ASP.NET中,可以通过启用CORS功能来阻止此类请求。 首先,您需要使用Nuget Manager安装“ Microsoft.AspNet.WebApi.Cors”软件包。 然后按照以下说明修改您的WebApiConfig文件。

public static class WebApiConfig  
{  
    public static void Register(HttpConfiguration config)  
    {  
        var cors = new EnableCorsAttribute("http://localhost:18479", "*", "*");  
        config.EnableCors(cors);  
        // Web API configuration and services  

        // Web API routes  
        config.MapHttpAttributeRoutes();  
        config.Routes.MapHttpRoute(name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new {  
        id = RouteParameter.Optional });  
    }  
}  

您可以针对每个控制器启用每个操作的cors。 以上示例将在全球范围内启用cors。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM