首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >.Net MVC 6桌面应用授权

.Net MVC 6桌面应用授权
EN

Stack Overflow用户
提问于 2016-08-12 08:36:24
回答 1查看 126关注 0票数 0

使用模板代码(项目模板),我创建了一个带有登录的.net核心mvc6 webapp应用程序。

登录控制器是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 // POST: /Account/Login
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)

LoginViewModel是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 public class LoginViewModel
{
    [Required]
    [EmailAddress]
    public string Email { get; set; }

    [Required]
    [DataType(DataType.Password)]
    public string Password { get; set; }

    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }
}

我可以从登录网页登录。

我想在这个项目中使用带有授权属性的控制器(as API),这个项目来自一个桌面.net c#程序。为此,我计划从登录控制器获得一个cookie,并使用cookie访问API。

桌面软件获得cookie的代码是(复制粘贴表单StackOverflow并添加JSON序列化):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      private void btnLogin_Click(object sender, EventArgs e)
    {
        HttpWebRequest http = WebRequest.Create(loginUrl) as HttpWebRequest;
        http.KeepAlive = true;
        http.Method = "POST";
        http.ContentType = "application/x-www-form-urlencoded";

        var login = new LoginViewModel();
        login.Email = txtUserName.Text;
        login.Password = txtPassword.Text;
        var postData = new JavaScriptSerializer().Serialize(login);

        byte[] dataBytes = UTF8Encoding.UTF8.GetBytes(postData);
        http.ContentLength = dataBytes.Length;

        using (Stream postStream = http.GetRequestStream())
        {
            postStream.Write(dataBytes, 0, dataBytes.Length);
        }
        HttpWebResponse httpResponse = http.GetResponse() as HttpWebResponse; 

//IT在这里停留,HTTP 400

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        // Probably want to inspect the http.Headers here first
        http = WebRequest.Create(authorized) as HttpWebRequest;
        http.CookieContainer = new CookieContainer();
        http.CookieContainer.Add(httpResponse.Cookies);
        HttpWebResponse httpResponse2 = http.GetResponse() as HttpWebResponse;
    }

LoginViewModel类具有与webapp相同的属性。

不幸的是,它不能工作,HTTP响应是400。

问题:

  1. 我的逻辑还好吗?如果是,你能指出代码哪里出错了吗?
  2. 基于cookie的身份验证可以访问Restful吗?
  3. 考虑到它将是HTTPS,它是否可以用于低贸易量的will服务?
  4. 有没有更好的方法来做到这一点,没有任何第三方提供商,如频闪路径或auth0?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-13 13:17:23

我的逻辑还好吗?如果是,你能指出代码哪里出错了吗?

如果您的API期望数据为JSON,那么您可能必须适当地设置ContentType头:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http.ContentType = "application/json";

(如果您仍然将400作为状态代码,请检查来自API的关于您发送错误的任何提示的响应)。

基于cookie的身份验证可以访问Restful吗?

这是可能的,但可能不是最好的方法,特别是在非浏览器客户端。现在访问受保护的API的一个流行选择是通过Bearer令牌。您可以从身份提供程序端点(您的应用程序或第三方提供程序(如Auth0或StormPath) )获得令牌,并且在对API的每个请求中都将该令牌包含在Authorization头中。有关这方面的一些讨论,请参见https://auth0.com/blog/cookies-vs-tokens-definitive-guide/

您的API必须准备接受承载令牌作为授权访问的另一种方式。在HTTP的情况下,一些中间件将检查header中的传入令牌,验证它,并设置.Net,以便您的Authorize属性继续按预期工作。

通常,令牌是可以检查和调试的JWTs (Json Web令牌) (它们是签名的,而不是加密的),这是使用cookie更好的体验。例如,您可以查看令牌是否过期,并获得一个新的令牌,从而避免API中的错误。

考虑到它将是HTTPS,它是否可以用于低贸易量的will服务?

它可以,但是,同样,只有当您无法控制您的API来添加对令牌的支持时,才能做到这一点。

有没有更好的方法来做到这一点,没有任何第三方提供商,如频闪路径或auth0?

JWT格式是开放和标准的。您可能会生成您的所有权,并从您需要构建的身份验证API中返回它们(这将返回令牌而不是会话cookie)。

一旦您拥有了JWT,Microsoft提供了一个包,它将帮助您使用JWT令牌保护您的API:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Install-Package Microsoft.AspNetCore.Authentication.Jwt

然而,身份验证很容易出错。这是第三方供应商,如风暴路径或Auth0将非常有用。免责声明:我为Auth0工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38922752

复制
相关文章
在Django中接收文件并存储
这是一个简单的接收客户端上传的头像文件并保存的例子,应该看过这个就已经大体会使用接收文件了
py3study
2020/01/21
2.8K0
TStor CSP文件存储在大模型训练中的实践
大模型作为人工智能领域的重要发展趋势,正在逐渐改变人们的生活和工作方式。随着近年来大模型领域技术的突破,各类语言模型、图像模型、视频模型快速演进,国内外市场也不断涌现出优秀的大模型研究及商业化平台,预期通过对模型效果的持续优化和产品方案层面的持续包装,共同推动推动国内各行各业的产业升级。
云存储
2023/11/01
4570
TStor CSP文件存储在大模型训练中的实践
06 _使用命令在hadoop的HDFS中存储文件
1 对master上的hadoop/etc/hadoop下的hdfs-site.xml做如下配置
全栈程序员站长
2021/08/23
2.7K0
硬盘驱动器 (HDD) 存储架构
硬盘驱动器 (Hard Disk Drive,简称HDD) 是一种常见的持久性存储设备。它使用磁盘作为存储介质,通过旋转磁盘和移动读写头来读取和写入数据。本文将详细介绍 HDD 的存储架构,包括内部组件、工作原理和数据组织方式。
用户11132717
2024/06/20
5130
硬盘驱动器 (HDD) 存储架构
word在试图打开文件时遇到错误,检查稳定或驱动器文件权限
我看很多人也是这问题,这种方案就可以解决。但我的是根本就没有“解除锁定”这一选项。
全栈程序员站长
2022/08/25
1.8K0
word在试图打开文件时遇到错误,检查稳定或驱动器文件权限
云存储比你的电脑或外部驱动器更好?
什么是云存储? 云存储,就是可以向你的数据存储在远端的服务器上。 这意味着你可以通过远程存储如文档,照片,音乐和视频等数据,而不必占用物理空间或家里和公司的计算机上。有两种方案可供选择: 云存储 公
静一
2018/03/23
1.1K0
将文本文件的内容存储在DataSet中的方法总结
本文介绍了一种将文本文件的内容存储在DataSet中的方法,包括读取文件、处理数据、创建表、填充数据和解析记录等步骤。该方法包括读取文件、处理数据、创建表、填充数据和解析记录等步骤。
彭泽0902
2018/01/04
3.4K0
在Cookie中存储对象
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/46955119
DannyHoo
2018/09/13
3.8K0
群辉存储空间映射网络驱动器
群辉存储空间映射网络驱动器 1.打开Synology Assistant找到发现的群辉设备,右键选择网络硬盘 image.png 2.输入NAS的用户名和密码 image.png 3.选择需要映射的存储空间 image.png 4.选择一个驱动器盘符 image.png 5.点击完成即可 image.png 6.在我的计算机中可以看到我们映射的网络位置 image.png
donkexu
2021/06/26
2.2K0
群辉存储空间映射网络驱动器
在 K8S 中 Java OOM dump 文件存储方案
本文试图解决在 k8s 环境下 java 内存溢出时候 dump 文件的存储问题。
谢正伟
2021/05/27
10.1K1
在 K8S 中 Java OOM dump 文件存储方案
在控制流中存储数据
在设计并发程序时,反复出现的一个决定是将程序状态表示为控制流还是表示为数据。这篇文章是关于这个决定意味着什么以及如何接近它。如果做得好,将存储在数据中的程序状态存储在控制流中,可以使程序比其他方式更清晰、更易于维护。
Michel_Rolle
2023/12/18
2.5K0
在.NET中调用存储过程
因为做项目要用到数据库,因此存储过程是必不可少的,看了一点如何在.NET中调用存储过程的资料,颇有点心得,觉得这个东西是当用到数据库的时候必须要会的一项技术。下面是它的定义:
SAP梦心
2022/05/07
2.2K0
浅析:外链在SEO中的作用!
长期以来,外链在SEO工作都是一个不可逾越的话题,它在整站优化中,扮演重要的角色,特别是熊掌号上线,很多SEO人员,逐渐在唱衰外链的作用。
蝙蝠侠IT
2019/07/15
7850
浅析:外链在SEO中的作用!
Python 中 mro 链在 super 调用中的应用
此时对 B1 来说,它的 mro 调用链是:B1 --> A --> object
bowenerchen
2024/05/22
2230
Python 中 mro 链在 super 调用中的应用
Merkle tree在区块链中的应用
上篇博文我们转载了一篇《Merkle Tree(默克尔树)算法解析》,那么大家是不是会有疑问,学习这个算法之后,我们改怎么去应用,区块链中又是如何应用的?今天这篇博客就以Merkle tree在区块链中的具体用法为例简单说明一下。
程序新视界
2022/05/06
7950
Merkle tree在区块链中的应用
使用VSCode连接到IBM Cloud区块链网络
上篇文章我们讲到怎么在IBM Cloud搭建区块链环境并且将本地的智能合约导出并安装在IBM Cloud网络环境中。
程序那些事
2020/07/08
8680
牧牛生态科技,区块链在供应链中的优势
随着区块链技术步伐不断加快,区块链目前已经涉足很多行业,很多业内人士认为供应链领域将成为区块链技术迅速发展的一片沃土。区块链技术应用于供应链领域中,可以有效的改善当前供应链领域存在的很多痛点,赋能供应链转型升级与发展。那区块链在供应链中的优势是什么?
洋洋的小叶
2021/08/26
8010
牧牛生态科技,区块链在供应链中的优势
区块链技术公司谈区块链在证券中的使用
加拿大中央银行日前与国家支付系统、证券交易所运营商、分布式账本技术公司以及全球咨询和专业服务公司共同开展了一项区块链实验。与全球咨询公司埃森哲和区块链公司R3进行合作,展示了基于DLT的证券和支付结算平台的可行性。主要探索证券的结算功能以及如何在私人区块链上进行支付互动。试验需要对已与现存市场基础设施进行关联的概念验证系统进行开发和测试。在一份名为Jasper Phase III,使用分布式账本技术进行证券结算的报告中指出,POC计划将CDSX 的证券和现金账本,以及Payments Canada的大额转账系统(LVTS)的参与者联系到一起,以促进每日的加元结算。
用户3031714
2018/10/30
9820
Android 存储学习之在外部存储中读写文件
上节学习了如何在手机内部存储中读写文件,本节学习如何在手机的外部存储中读写文件。那就是如何在Sdcard中读写文件。
DragonKingZhu
2022/05/08
1.5K0
Android 存储学习之在外部存储中读写文件
谈谈集群NAS在VDI存储中的应用
S君小故事:存储选型难在何处?S君是一家公司的存储工程师,每当业务部门提出新的存储设备需求时,他就要配合系统架构师共同确定产品方案。这可不只是数据库放在SAN、共享文件放NAS那么简单。看着抽象的预估
静一
2018/03/23
2.5K0

相似问题

如何下载存储在文件夹中的文件

10

链接到Drupal中的文件

10

上传大文件到天蓝色存储,并将其链接到Drupal中

10

直接链接到块中的文件

10

如何创建文件存储库,以便将文件链接到其他内容类型?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文