我已经为某些动作创建了一个api并实现了JWT。我遵循了一些教程并成功阻止了对非GET端点的未授权请求。每个教程似乎都涵盖了相同的概念:向用户发出请求。也就是说,我获取了他们的用户名/密码,请求令牌,验证该令牌,然后执行操作。
问题在于我不希望公众能够向api发出GET
个请求。我也不希望他们登录应用程序,因为没有必要。
我可能也会在网站上使用一些ajax,我不确定这是否会让事情变得复杂。
我是否应该使用"应用程序"用户名密码?或者是否有一种标准方法来限制api请求到应用程序?
答案 0 :(得分:1)
看看你的场景,我说你肯定要考虑IdentityServer。
这将允许您跳过OAuth2背后的大部分复杂性。我已经看到很多人提到OAuth2流量过大,但它是一个标准,如果你花一些时间来理解它,那么你会发现它实际上并不那么难。 / p>
这对您的情况有何影响?
您希望使用应用程序身份验证,因为您不关心登录的用户。这意味着您将定义ClientID和ClientSecret组合,这将有助于识别一个应用程序。如果您有多个应用程序,只需创建更多组合。
您将向Authorization Server发出初始请求,并在Basic Authorization标头中传递ClientID和CLientSecret。
您将获得一个令牌,该令牌允许您在指定的时间段内访问您的资源。您可以使用Bearer Authorization标头使用从授权服务器收到的令牌访问您的资源。
基本上就是这样。一个好的资源是Taiseer's blog。我强烈推荐它,因为这个人是Microsoft MVP并且在这个特定领域做了很多工作。
我有一篇使用Identity v3的旧文章。它现在已经过时但它确实详细解释了所有内容,所以你可能也想看看它:
我建议远离任何自定义安全系统,因为这些系统不是经过强化的,而且在野外并没有真正得到证实。用一个小错误揭露自己很容易。
答案 1 :(得分:0)
我们在这里谈论的内容似乎是基于用户身份创作每个GET请求。
获取用户名和密码,请求令牌和验证令牌都是身份验证。听起来像你接下来要做的就是授权,它涵盖了用户可以做什么"。
为了授权请求,您需要一种机制来识别每个用户/用户组可以做什么和不能做什么,并在单个GET端点查询,以确定是否应该允许用户发出请求如果没有返回适当的403 Forbidden响应。
答案 2 :(得分:0)
在ASP.NET中,您可以通过启用CORS功能来阻止此类请求。 首先,您需要安装" Microsoft.AspNet.WebApi.Cors"包,使用Nuget Manager。然后按照以下修改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。以上示例将使全球范围内的角色成为可能