创建项目时无需身份验证的 ASP.NET 身份集成

2023-12-20

我对身份有疑问,而且我对此不太熟悉。不久前,我开始了一个新项目,最初并不打算附加任何身份验证。然而,随着项目的发展,我们发现我们应该实施它。由于最初并不是这样设置的,所以我创建了一个登录表单。

我找到了这个问题的答案并实现了它:

如何在 ASP.NET MVC 5 中实现自定义身份验证 https://stackoverflow.com/questions/31584506/how-to-implement-custom-authentication-in-asp-net-mvc-5

但是它不起作用,我不知道为什么。

这是我的代码:

这里没什么可看的,只是一个简单的形式。

@{
    ViewBag.Title = "Login";
}

<div class="container">

<h2>Login</h2>

<br />

@using (Html.BeginForm("Login", "Main"))
{
    <div class="row">
        <div class="form-group col-xs-6">
            @Html.Label("Username", htmlAttributes: new { @class = "control-label col-sm-3" })
            <div class="col-sm-8">
                @Html.TextBox("username", null, new { @class = "form-control" })
                @*Html.ValidationMessageFor(model => model.EnrollmentOption, "", new { @class = "text-danger" })*@
            </div>
        </div>

        <div class="form-group col-xs-6">
        </div>

    </div>

    <div class="row">
        <div class="form-group col-xs-6">
            @Html.Label("Password", htmlAttributes: new { @class = "control-label col-sm-3" })
            <div class="col-sm-8">
                @Html.Password("password", null, new { @class = "form-control" })
                @*Html.ValidationMessageFor(model => model.EffectiveDate, "", new { @class = "text-danger" })*@
            </div>
        </div>

        <div class="form-group col-xs-6">
        </div>

    </div>

    <div class="row">
        <div class="form-group">
            <div class="col-md-offset-6 col-sm-5">
                <input type="submit" id="login" value="Sign in" class="btn btn-primary" />
            </div>
        </div>
    </div>
}

为它实施的行动是这个,这更重要:

    [HttpPost]
    public ActionResult Login(string username, string password)
    {
        if (isLoginValid(username, password))
        {
            var ident = new ClaimsIdentity(
              new[] { 
          // adding following 2 claim just for supporting default antiforgery provider
          new Claim(ClaimTypes.NameIdentifier, username),
          new Claim("http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider", "ASP.NET Identity", "http://www.w3.org/2001/XMLSchema#string"),

          new Claim(ClaimTypes.Name,username),

          // No roles needed for now...
              },
              DefaultAuthenticationTypes.ApplicationCookie);

            HttpContext.GetOwinContext().Authentication.SignIn(
               new AuthenticationProperties { IsPersistent = false }, ident);
            return RedirectToAction("QuoteSearch"); // auth succeed 
        }
        else
        { 
            // invalid username or password
            ModelState.AddModelError("", "Invalid username or password");
            return View();
        }
    }

还有 isLoginValid 函数(目前它设置为使用硬编码登录)

    [NonAction]
    private bool isLoginValid(string user, string password)
    {
        return (user.ToLower() == "someUser" && password.ToLower() == "myPassword");
    }

我不太了解声明或身份在底层是如何运作的。不过,我确实确保添加了所有必要的参考资料。在登录重定向后对我的操作使用授权属性时,我收到来自 IIS 的未经授权的请求。我的代码有问题吗?

我应该更改或修复哪些内容才能使用身份的授权部分?

Thanks,


经过一些故障排除并感谢 Guysherman 的评论,我找到了解决方案。由于我在创建解决方案时没有考虑身份验证,因此我删除了 App_Start 文件夹中的引用和必要的 OWIN 配置代码。

因此,尽管登录工作正常,但身份中没有定义任何内容,授权部分也没有发生任何事情。通过创建一个新项目并添加配置身份所需的所有代码,我能够正确使用授权属性。没有任何问题。

(这个答案适用于 ASP.NET 4.6,我认为 ASP.NET Core 的处理方式有所不同)

UPDATE:

为了使这个答案更好,我认为我应该更详细地阐述我为使其发挥作用所做的工作。

当使用身份创建一个新项目时,您会看到如果您选择不添加它,有几个文件不会创建,您将需要这些文件,其中大部分存储在 App_Start 中。

我复制了没有的文件并更改了命名空间以匹配我的实际项目。这样做后,我丢失了哪些 nuget 软件包就很明显了,所以我添加了尚未添加的软件包。

Startup.Auth.cs 将定义身份验证的关键函数:

配置认证

该函数必须在启动类中调用。在配置方法中。

最后,为了使一切正常工作,您还必须包含通常在 Models 文件夹中创建的文件 IdentityModel.cs。就我而言,我将所有模型放置在不同的项目中,因此我将类放置在那里并添加对 IdentityConfig.cs 的引用,以便该类能够识别 IdentityModel 的存在。

仅此而已。就我而言,我在身份尝试连接到数据库来查找用户时遇到了很多问题,因为身份没有配置数据库,所以我的应用程序由于数据库连接失败而开始崩溃。删除第三张图片中标有红色的线条使其对我有用。我不想要身份的数据库连接,因为我有自己的用户处理,这可能不是其他人的情况。

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

创建项目时无需身份验证的 ASP.NET 身份集成 的相关文章

  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • 参数超出范围异常

    Random r new Random int InvadorNumberA r Next 0 5 int randomShot r Next 5 List
  • 如何按顺序播放多个音频文件

    我有几个长篇故事 其源音频是逐句音频文件 我想创建一个网页 人们可以在其中多次聆听特定故事的各个句子 或者从头到尾聆听整个故事 首先 我的网页有很多
  • 当用户未登录时如何将用户重定向到登录页面

    当用户登录时 我们将其用户 ID 存储在会话中 session user id user id 现在 在我们网站的所有其他链接上 我们希望用户重定向 如果session user id nil 我认为完成的方式是在控制器的每个方法中完成 d
  • 强制 git 推送后如何拉取?

    假设我从 git 存储库中提取更改 然后repo的作者强制推送到中央repo 现在我无法拉动 因为历史被重写了 假设作者强制推送了正确的版本 如何提取新的提交 并放弃旧的提交 我知道这是糟糕的 git 工作流程 但有时你无法避免这种情况 丢
  • 如何将文件上传到jenkins并使用它来构建?

    我对 Jenkins 很陌生 我一直在尝试使用curl 来构建我的工作 除了这个卷曲之外 我还想向 Jenkins 发送一个文件 该文件应该放置在我工作区的特定目录中 我一直在谷歌上搜索很多 但似乎找不到可以引导我找到解决方案的明确文档 请
  • 您可以将 JavaScript 和 CSS 文件存储在 localStorage 中以提高在线 Web 应用程序的性能吗?

    我正在开发一个 Web 应用程序 它的行为非常类似于 iOS 和 Android 的本机应用程序 然而 Javascript 文件 jQuery 我自己的 和 css 文件对于移动使用来说相当大 如果用户没有启用 3G 这会使应用程序加载缓
  • IIS 强制斜杠,即使使用 URL 重写来删除它

    即使 URL 重写如下 我也无法删除网站 URL 的尾部斜杠 http ruslany net 2009 04 10 url rewriting tips and tricks http ruslany net 2009 04 10 url
  • Oracle 和 Eclipse 编译器生成的 java 字节码的差异

    我们的项目做了一些 Java 字节码检测 我们偶然发现了一些奇怪的行为 假设有以下代码片段 public void a new Integer 2 Oracle的javac将上面的内容编译成如下字节码 0 new 2 class java
  • 尝试使用 Windows powershell 创建新的 Angular 项目时出现错误:“操作被操作系统拒绝”

    尝试创建新的角度项目时 我不断收到相同的错误消息 我尝试使用 Windows Powershell 使用以下命令创建一个新的角度项目 ng 新的你好世界 gt 您想添加角度路由吗 是的 gt 样式表格式 CSS 我收到以下错误消息 我已经尝
  • 如何在 Apache Tomcat 中初始化 Web 应用程序?

    我使用的是 WebSphere Application Server 它提供了一个平台初始化侦听器 当应用程序启动时会调用该侦听器 现在 我正在使用 Apache Tomcat 但还没有找到这样的东西 我想做的是在应用程序开始服务请求之前做
  • Android:在 onCreate 之前设置活动方向,但不在清单中(HDMI 插入问题)

    我可以通过使用以编程方式完美管理方向变化setRequestedOrientation in onCreate 一切都工作得很好 直到我插入 HDMI 电缆 此后 平板电脑 想要 处于横向模式 因此 当我打开一个活动时 它首先显示为 横向
  • 在 PHP 中使用 cURL 从 URL 读取 XML

    我想从 Magento 中的 URL 读取 XML 数据 我有三个文本框 一个用于baseurl 其他分别用于用户名和密码 当我输入这些值时 我得到的网址如下 http xyz com somefile html 用户名 用户名 密码 密码
  • 接口中的静态方法需要 -target:jvm-1.8

    我正在使用 gradle 4 5 scala 2 11 11 2 12 4 和 JDK 1 8 0 162 构建 scala 项目 它工作正常 直到我升级到 scala 2 11 12 使用 2 11 12 我不断收到编译错误 Static
  • 自定义argparse帮助消息

    我编写了以下示例代码来演示我的问题 import argparse parser argparse ArgumentParser parser add argument v version action version version pr
  • 如何跨页面使用store和session变量?

    当访问一个页面时 我想启动一个会话并存储一个会话变量 然后从另一个页面 我想检查该会话变量是否已存储 这段代码对我不起作用 分步会议 在一
  • 谷歌地图地点自动完成 addEventListener 不起作用

    我一直在尝试在 ionic 2 项目中添加谷歌地图位置自动完成功能来更新用户位置 但是 addEventListener 似乎不起作用 并且没有控制台错误 有人能告诉我哪里出了问题吗 ngAfterViewInit let input lt
  • SIMD 需要多核 CPU 吗?

    实现SIMD是否需要多核CPU 在阅读有关 SIMD 的维基百科时 我发现了以下短语 多个处理元素 那么这句话和 多核CPU 有什么区别呢 每个核心都有自己独立的SIMD执行单元 在一个内核中使用 SIMD 指令不会消耗其他内核中的执行资源
  • 添加 MySql jdbc 驱动程序时 Eclipse 出错

    我遇到以下异常 A driver already exists with that name Please provide a unique driver name 有人告诉我我做错了什么吗 请关注 http www javahotchoc
  • 使用 PHP 对 MySQL 中的时间戳进行分组

    我想使用时间码记录 MySql 中的某些活动time 现在我正在积累数千条记录 我想按小时 天 月等组输出数据 在 MySQL 中对时间代码进行分组的建议方法是什么 示例数据 1248651289 1248651299 1248651386
  • 创建项目时无需身份验证的 ASP.NET 身份集成

    我对身份有疑问 而且我对此不太熟悉 不久前 我开始了一个新项目 最初并不打算附加任何身份验证 然而 随着项目的发展 我们发现我们应该实施它 由于最初并不是这样设置的 所以我创建了一个登录表单 我找到了这个问题的答案并实现了它 如何在 ASP