[英]How can I restrict my Azure Web App API access to only my Xamarin.Forms app?
[英]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.