- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我打算使用下面的代码来保证我的 web api 安全,但我不确定这是否足够安全和合乎逻辑。我不想使用 OWIN 和 AspNet.Identity,因为它对我来说非常复杂,我不完全理解,我不知道我如何自定义数据库表、用户角色等。但我的方法很简单,并且非常可自定义我。
这是 CustomAuthorizeAttribute;
public class CustomAuthorize : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if ((actionContext.Request.Headers.GetValues("Host").FirstOrDefault().Contains("localhost:15742")))
{
IEnumerable<string> access_token;
if (actionContext.Request.Headers.TryGetValues("Authorization", out access_token))
{
var user = GetUserByToken(access_token);
if (user!=null && !user.TokenIsExpired)
{
HttpContext.Current.Response.AddHeader("WWW-Authenticate", "Custom " + access_token.FirstOrDefault());
return;
}
else
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
HttpContext.Current.Response.AddHeader("WWW-Authenticate", "Custom");
return;
}
}
else
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
}
}
else
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Forbidden);
}
}
}
<script type="text/javascript">
$(function () {
var access_token = $.cookie('access_token');
if (access_token == undefined) {
$.cookie('access_token', 'test-token');
}
$.ajax({
url: '/api/account',
headers: { access_token: access_token },
success: function (data) {
document.write(data.name + " " + data.lastname);
}
});
});
</script>
最佳答案
Necroreply 对于那些希望制作自定义身份验证属性的人:)
第一次检查是多余的,因为 HTTP 请求只是 TCP 连接上的一串文本,因此任何人都可以使用 TCP 客户端连接到您的服务器并发送他想要的任何 header 。
actionContext.Request.Headers.GetValues("Host").FirstOrDefault().Contains("localhost:15742"))
根据 https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api
Authorization filters run before the controller action. If the request is not authorized, the filter returns an error response, and the action is not invoked.
user!=null && !user.TokenIsExpired
所以这个属性可以完成工作并且可以被认为是安全的。
HttpContext.Current.Response.AddHeader("WWW-Authenticate", "Custom");
HttpContext.Current.Response.AddHeader("WWW-Authenticate", "Custom " + access_token.FirstOrDefault());
public override void OnAuthorization(HttpActionContext actionContext)
{
IEnumerable<string> access_token;
if (!actionContext.Request.Headers.TryGetValues("Authorization", out access_token))
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
return;
}
var user = GetUserByToken(access_token);
if (user == null || user.TokenIsExpired)
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
return;
}
// OK
return;
}
public void ConfigureAuth(IAppBuilder app)
{
app.UseGoogleAuthentication(
clientId: "000-000.apps.googleusercontent.com",
clientSecret: "00000000000");
}
关于基于 Asp.Net Web Api token 的授权,无需 OWIN 和 AspNet.Identity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31451362/
我将 aspnetboilerplate/aspnetzero 模板用于具有多数据库的 Multi-Tenancy SaaS 应用程序。这使用 CaSTLeWindsor 作为 DI 框架。 我遇到了
在我的应用程序中,我安装了以下两个 nuget 包: Microsoft.AspNet.Cors - 5.2.2 Microsoft.AspNet.WebApi.Cors - 5.2.2 我的应用程序
我有一个 aspnet core web api 项目,可以通过发布向导将其部署到 Azure 应用服务。但后来我在普通的 aspnet web api(.Net Framework 4.6 上的 M
2015 年 11 月 20 日更新 如何针对使用旧成员(member)提供程序存储用户的数据库进行身份验证? (aspnet_* 表)知道这个数据库被其他应用程序使用,所以我没有迁移(或更改)数据库
我正在使用最新的 VS2015 社区和 ASP.NET 5 等构建 AngularJS 单页应用程序... 我现在在尝试实现身份验证时遇到的问题是我需要使用这两个命名空间: Microsoft.Asp
这两个库有什么区别: https://www.nuget.org/packages/Microsoft.AspNet.Web.Optimization/1.1.0 https://www.nuget.
如果我使用安装的 Nuget 包 Microsoft.AspNet.FriendlyUrls v 1.0.2 和 Microsoft.AspNet.Identity v.1.0.0. 从 jQuery
我们在 ASP.NET 5 中进行身份验证时遇到了麻烦。In this security sample ,我们看到了这种东西: app.Run(async context => { va
背景:我们正在进行的项目包含多个共享两个库的解决方案。今天一切都是用 .NET Framework 4.6.1 编写的。该项目的目标是为新项目采用 .NET Core 并能够在 Docker 中运行
我正在使用带有 OData 端点的 Web API 和 Entity Framework 创建一个 RESTful 服务。 Microsoft.AspNet.WebApi.OData 和 Micros
在 VS 2015 中,升级 NuGet 包后,我收到以下警告: Dependency specified was Microsoft.AspNet.Mvc >= 6.0.0-beta6 but en
作为一枚后端程序狗,项目实践常遇到定时任务的工作,最容易想到的的思路就是利用Windows计划任务/wndows service程序/Crontab程序等主机方法在主机上部署定时任务程序/脚本。
研究身份提供者的概念证明,需要帮助理解 aspnet 身份的一些细微差别,特别是与用户声明相关的。 我想要完成的事情: 1) 公开一个 MVC 应用程序,该应用程序提供对 2 个微服务之一的安全访问,
我正在尝试使用一些非常标准的算法来解密字符串。 public static string DecryptString(string cipherText) { string keyString
我知道这取决于项目,但我想了解典型的 asp.net 核心项目是否有通用做法(例如忽略 node_modules)。 最佳答案 截至 2020 年,您应该使用 dotnet new gitignore
1. 加入dll文件这是必须的。 2.拖入控件到应用位置,添加引用: 引用: <%@ Register Assembly="AspNetPage
为什么 mvc 5 中包含身份验证过滤器? mvc 5 中的身份验证过滤器和授权过滤器之间的主要区别是什么? 最佳答案 我找到了以下博文:ASP.NET MVC 5 Authentication Fi
我正在尝试遵循一些过时的 AspNet Core 1.1 教程项目 (虽然我使用的是 Visual Studio 2019 预览版 2.0, 和 .net core v3.0.0-preview9 安
如果我使用本地 Web 服务器进行开发,我可以在不安装 IIS 的情况下从命令行使用实用程序 aspnet_compiler 编译网站项目 (3.5) 吗? 谢谢 最佳答案 是的你可以。您必须指定将在
我有一个.NET Core 2 Web应用程序,并且我想使用ASP.NET Identity来验证我的用户。在.NET Core 1.x上,我的代码运行正常。 我迁移到.NET Core 2,并且在V
我是一名优秀的程序员,十分优秀!