ASP.NET Web API 是微软构建 HTTP 服务的框架,用于创建 RESTful 应用程序。授权是确定用户是否有权限访问特定资源或执行特定操作的过程。
[Authorize(Roles = "Admin,Manager")]
public class AdminController : ApiController
{
// 只有Admin或Manager角色的用户可访问
}
[Authorize(Policy = "RequireAdminClaim")]
public class AdminController : ApiController
{
// 需要特定声明的用户可访问
}
public IHttpActionResult Get(int id)
{
var resource = GetResourceById(id);
if (!UserCanAccessResource(User, resource))
{
return Unauthorized();
}
return Ok(resource);
}
// 配置JWT认证
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = Configuration["Jwt:Issuer"],
ValidAudience = Configuration["Jwt:Audience"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
};
});
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = "GitHub";
})
.AddCookie()
.AddOAuth("GitHub", options =>
{
options.ClientId = Configuration["GitHub:ClientId"];
options.ClientSecret = Configuration["GitHub:ClientSecret"];
options.CallbackPath = new PathString("/signin-github");
options.AuthorizationEndpoint = "https://github.com/login/oauth/authorize";
options.TokenEndpoint = "https://github.com/login/oauth/access_token";
options.UserInformationEndpoint = "https://api.github.com/user";
});
原因: 缺少有效的认证令牌或令牌已过期 解决:
原因: 用户认证成功但无权访问资源 解决:
原因: 跨域请求未正确处理 解决:
// 在Startup.cs中配置CORS
services.AddCors(options =>
{
options.AddPolicy("AllowSpecificOrigin",
builder => builder.WithOrigins("http://example.com")
.AllowAnyHeader()
.AllowAnyMethod());
});
通过合理选择和实现授权机制,可以确保ASP.NET Web API的安全性和可用性。
没有搜到相关的文章