具有自定义身份验证的 ASP.NET Web API

2024-02-03

我正在寻求帮助创建具有自定义用户名/密码身份验证的 Web API。

我有自己的数据库来验证用户,我不想使用 Windows 身份验证。

我希望能够用类似的属性来装饰我的 Web api 调用[Authorize],这样在未登录的情况下进行的调用将会失败。

我不想将凭据作为参数传递给每个方法。

此 API 将主要由使用 Xamarin PCL 的移动设备使用。

Web API 必须使用 SSL。

这似乎是一个简单的设置,但我的谷歌搜索没有显示任何超级有用的点击。

理想情况下,我想要一个登录控制器来授权用户并允许后续方法调用。

有人可以提供一个基本的例子或一些好的阅读材料吗?


这是一个很大的主题,你可能需要花一些时间来巩固基础知识,抱歉。

那是说... 为了对后续方法调用进行身份验证,您需要可以随每个请求传回的内容。如果您从网站调用 api,比如说因为您使用的是 Angular 或类似的,那么一个简单的 cookie(适当加密和 MACed)就可以工作。具体如何实现取决于您是否使用 OWIN 以及您的项目中是否还有 MVC 来提供页面。不要自己创建 cookie,请使用 FormsAuthentication 或等效的 OWIN 中间件。 您不需要使用 Microsoft 的会员资格或身份,但请注意,进行自己的密码处理并非易事,您确实需要知道您正在使用这些东西做什么 - 如果您愿意,没有什么可以替代大量研究要做到这一点。

如果您需要从网站以外的其他地方调用 api,那么 cookie 就会很痛苦。另请注意,使用 cookie 和 Web api 时存在一些微妙的 CSRF 漏洞,您需要了解并防范这些漏洞。

Cookie 的替代方案是嵌入 ThinkTecture Identityserver(免费)之类的东西,并使用它来颁发 oAuth 令牌,然后将它们附加到每个 API 请求。它有很多优点,但也比较复杂。

资源
您确实询问了从哪里开始阅读的指示。由于 Microsoft 在过去几年中多次更改其“默认”方法,因此您的任务变得复杂。当前的默认方法是Identity http://www.asp.net/identity它取代了以前的 MembershipProvider (很好的摆脱)。如果您对此不熟悉,说实话,我建议您走这条路 - 您可以扩展它,并且它与堆栈的其余大部分都很好地结合在一起。是的,您会失去一些灵活性,并且需要将其包装在当前的用户存储中。但您需要问问自己,开箱即用的安全性是否值得。

我也想推荐布洛克·艾伦的博客 http://brockallen.com/category/asp-net-security/。这是相当核心的内容,但他了解自己的知识,并且经常会解释许多 Microsoft 身份验证技术的内部结构。

我建议您尝试阅读“OWIN 身份验证中间件”。这就是一切的发展方向,尤其是 ASP.Net vNext。遗憾的是,大多数文档都集中在它是多么容易使用(对于演示而言),但缺乏关于它如何真正工作的任何深入信息,这可能非常令人沮丧。

为了掌握代币和不同标准的工作原理,我建议您在这里观看此视频:http://www.ndcvideos.com/#/app/video/2651 http://www.ndcvideos.com/#/app/video/2651

然后看看 Azure 移动服务,它甚至有用于处理身份验证的客户端库(我相信)或 ThinkTecture Identity Server。即使你最终not使用 IdSrv,通过阅读他们的使用教程,您将学到很多关于整个事情如何工作的知识;这一切都基于开放标准。文档在这里:http://identityserver.github.io/Documentation/docs/ http://identityserver.github.io/Documentation/docs/尝试完成他们的教程;他们使用 Windows 控制台应用程序代替应用程序,但概念是相同的。

我祝你好运,但我想说please不要只是将一些看起来有效的东西拼凑在一起。 Web 安全变得越来越复杂,并且很容易在代码中留下漏洞 - 我的经验之谈:)

不要成为月猪。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有自定义身份验证的 ASP.NET Web API 的相关文章

  • C#.Net 邮件将进入垃圾邮件文件夹

    我正在从 ASP net Web 应用程序发送电子邮件 邮件发送成功 没有失败 但大多数都进入了垃圾邮件文件夹 请帮助我克服垃圾邮件过滤器 我的发送邮件代码 public void SendMail string FromAddress s
  • 如何使用 openSSL 函数验证 PEM 证书的密钥长度

    如何验证以这种方式生成的 PEM 证书的密钥长度 openssl genrsa des3 out server key 1024 openssl req new key server key out server csr cp server
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • strlen() 编译时优化

    前几天我发现你可以找到编译时strlen使用这样的东西 template
  • 如何在 C# 中将 Json 转换为对象

    我想将 Json 转换为 C 中的对象 这里的 Json 是 值 e920ce0f e3f5 4c6f 8e3d d2fbc51990e4 如何使用 Object 问题看似愚蠢 但其实并不那么愚蠢 我没有简单的 Json 我有 IEnume
  • 2个对象,完全相同(除了命名空间)c#

    我正在使用第三方的一组网络服务 但遇到了一个小障碍 在我手动创建将每个属性从源复制到目标的方法之前 我想我应该在这里寻求更好的解决方案 我有 2 个对象 一个是 Customer CustomerParty 类型 另一个是 Appointm
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D
  • 如何向 Mono.ZeroConf 注册服务?

    我正在尝试测试 ZeroConf 示例http www mono project com Mono Zeroconf http www mono project com Mono Zeroconf 我正在运行 OpenSuse 11 和 M
  • C# 根据当前日期传递日期时间值

    我正在尝试根据 sql server 中的两个日期获取记录 Select from table where CreatedDate between StartDate and EndDate我通过了5 12 2010 and 5 12 20
  • 来自嵌入图像的 BitmapSource

    我的目标是在 WPF 窗口上重写 OnRender 方法中绘制图像 someImage png 它是嵌入资源 protected override void OnRender System Windows Media DrawingCont
  • C# 获取数据表中所有重复行的计数

    我通过运行存储过程来填充数据集 并且从数据集中填充数据表 DataSet RawDataSet DataAccessHelper RunProcedure storedprocedureName this will just return
  • wordexp 失败时我们需要调用 wordfree 吗?

    wordexp 失败时我们需要调用 wordfree 吗 在某些情况下 调用 wordfree 似乎会出现段错误 例如 当 wordfree 返回字符串为 foo bar 的错误代码时 这在手册页中并不清楚 我已经看到在某些错误情况下使用了
  • 我们可以通过指针来改变const定义的对象的值吗?

    include
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • 读取依赖步行者输出

    I am having some problems using one of the Dlls in my application and I ran dependency walker on it i am not sure how to
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root
  • C:设置变量范围内所有位的最有效方法

    让我们来int举个例子 int SetBitWithinRange const unsigned from const unsigned to To be implemented SetBitWithinRange应该返回一个int其中所有
  • 声明一个负长度的数组

    当创建负长度数组时 C 中会发生什么 例如 int n 35 int testArray n for int i 0 i lt 10 i testArray i i 1 这段代码将编译 并且启用 Wall 时不会出现警告 并且似乎您可以分配
  • 如果找不到指定的图像文件,显示默认图像的最佳方式?

    我有一个普通的电子商务应用程序 我将 ITEM IMAGE NAME 存储在数据库中 有时经理会拼错图像名称 为了避免 丢失图像 IE 中的红色 X 每次显示产品列表时 我都会检查服务器中是否有与该产品相关的图像 如果该文件不存在 我会将其
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有

随机推荐

  • Realm gradle 任务

    在我的个人资料报告期间assembleDebuggradle 任务 我发现了两个与领域相关的 gradle 子任务 这需要相当多的时间 assembleDebug 1m21 44s transformClassesWithRealmOpti
  • 从给定的 n 个点中选择最远的 k 个点

    我有一套Sn维度中的点d如果需要的话 我可以计算所有成对距离 我需要选择k该集合中的点 使得它们的成对距离之和最大 换句话说 我想要 S 中的 p1 pk 使得 sum i j 我知道这个问题与this one https stackove
  • 从Java中的IAM用户名获取Amazon访问密钥和秘密密钥

    我碰到从 Java 中的 Amazon Access Key 获取用户名 https stackoverflow com questions 13595541 get username from amazon access key in j
  • 检查 PyObject 是否为 None

    我只是想检查一下是否PyObject我有的是None 我天真地以为任何None Pyobject 从函数返回的将是 NULL 指针 但情况似乎并非如此 那么 我如何检查是否PyObject 我的指向一个None object 我知道有类似的
  • 如何在 R 中抓取网页而不出现空网站问题?

    我需要提取有关物种的信息 并编写以下代码 然而 我对一些缺失的物种有疑问 如何才能避免这个问题呢 Q lt c rvest stringr tidyverse jsonlite lapply Q require character only
  • 在 Ubuntu 上通过 pyODBC 连接到 Microsoft SQL Server

    连接到 Microsoft SQL Server 实例时遇到问题pyODBC在一个Ubuntu 12 10 机器 我返回的错误是 pyodbc Error IM002 IM002 unixODBC Driver Manager Data S
  • Winforms DataBind 到控件的 Visible 属性

    将数据绑定到控件的可见属性时是否存在任何已知问题 无论我的属性是什么 该控件始终不可见 Public ReadOnly Property IsRibbonCategory As Boolean Get Return True End Get
  • 从 Azure DevOps 导出测试结果

    我可能遗漏了一些东西 但找不到从 Azure DevOps 中项目的构建管道执行页面导出测试运行结果的方法 有一个 下载日志 当然 从技术上讲 您可以在其中找到来自测试执行步骤的日志以及其他内容 但这似乎不是定期获取此类数据以进行法规 审计
  • 如何使用头文件签名(幻数)检查文件类型?

    通过输入文件及其扩展名 我的代码成功地从 幻数 中检测到文件的类型 magic numbers png bytes 0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A jpg bytes 0xFF 0xD8 0x
  • Laravel 5.4 - php artisan 缓存:使用“文件”缓存驱动程序时清除不会清除缓存文件

    Laravel 5 4 应用程序 CACHE DRIVER被设定为file and QUEUE DRIVER被设定为sync in env 当我跑步时php artisan cache clear它说Cache cleared succes
  • 每个 UDP 数据报的 Netty 不同管道

    我们有一个已经在 TCP IP 中实现的服务器 但现在我们要求该协议也支持 UDP 发送的每个 UDP 数据报都包含我需要解码的所有内容 因此这是一个非常简单的回复和响应系统 数据报中的数据由换行符分隔 服务器启动时的引导代码如下所示 SE
  • 如何向 NuGet 包添加 Unity 支持?

    如何将包发布到支持 Unity 游戏引擎 的 NuGet 另外 我是否需要安装 Unity 来编译它 或者针对特定的框架版本就足够了 如何将包发布到支持 Unity 游戏引擎 的 NuGet 只需按照以下说明进行操作即可the doc ht
  • Spring MVC:如何修改从spring控制器发送的响应?

    我有一个使用 Spring MVC 3 1 3 的应用程序和使用 Dojo 1 4 开发的 UI 该应用程序有几个控制器来处理通过上传的二进制文件dojo io iframe send 控制器发送一个 json 响应 该响应必须用
  • 面板未获得焦点

    我继续在我的简单图形程序中 使用 C 编写某种键盘导航 而我又遇到了麻烦 我的问题是我想处理键盘输入以移动图层 用鼠标移动图层已经可以很好地工作 但控件没有获得焦点 此控件既不会触发 KeyUp KeyDown KeyPress 也不会触发
  • 使用 Zend 框架进行连接更新

    我试图在 mysql 上使用 zend 更新带有连接的表 下面是我想通过 zend 执行的查询 已经谢谢了 UPDATE tbproduto LEFT JOIN SELECT codigo as codTipoProduto cdTipo
  • 如何从.Net Core 3创建Windows服务[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 最近我需要将 Net Core 3 0控制台应用程序转换为Windows服务 由于我不需要将此流程移植
  • Gif 帧持续时间似乎比预期慢

    我正在使用枕头图像库创建 GIF 我遇到了一个问题 我试图以尽可能最小的帧持续时间使某些帧闪烁得非常快 但是当我将帧的持续时间设置为 1 可能的最低持续时间 GIF 的持续时间为 100 实际上它的持续时间似乎比预期的要长 我用一个简单的方
  • 如何使一个 跨越两列表中的两列?

    如何使用 HTML 和 CSS 创建像上面示例一样的表格 我尝试过以下方法 table tr td style width 50 TEXT td td style width 50 TEXT td tr tr td style width
  • 以编程方式创建 UITableView

    我在 Xcode 4 6 中有一个使用故事板的应用程序 我将 UITableView 添加到视图控制器类中 它按预期工作 然而 当我尝试删除故事板中的 UITableView 并以编程方式将其添加回同一个类时 我遇到了两个具体问题 1 虽然
  • 具有自定义身份验证的 ASP.NET Web API

    我正在寻求帮助创建具有自定义用户名 密码身份验证的 Web API 我有自己的数据库来验证用户 我不想使用 Windows 身份验证 我希望能够用类似的属性来装饰我的 Web api 调用 Authorize 这样在未登录的情况下进行的调用