当前位置: 首页 > 知识库问答 >
问题:

ASP.NET Web API中的用户身份验证

东郭鹤龄
2023-03-14

这个话题让我感到难以置信的困惑。我是HTTP应用程序的新手,但需要开发一个从某处使用JSON数据的iPhone客户端。我选择了MS的Web API,因为它看起来很简单,但是当涉及到对用户进行身份验证时,事情变得相当令人沮丧。

null

这不是一个问题,而是要求提供一个具体如何做到这一点的例子。我看了以下几页:

尽管这些解释了如何处理未经授权的请求,但它们并没有清楚地演示诸如 之类的东西来请求用户凭据并验证它们。

谁愿意写一个好的简单的例子或指出我在正确的方向,请?

谢了。

共有3个答案

蒋华美
2023-03-14

我正在一个MVC5/Web API项目上工作,需要能够获得Web API方法的授权。当我的索引视图第一次加载时,我调用'token'Web API方法,我相信它是自动创建的。

获取令牌的客户端代码(CoffeeScript)为:

getAuthenticationToken = (username, password) ->
    dataToSend = "username=" + username + "&password=" + password
    dataToSend += "&grant_type=password"
    $.post("/token", dataToSend).success saveAccessToken

如果成功,将调用以下命令,在本地保存身份验证令牌:

saveAccessToken = (response) ->
    window.authenticationToken = response.access_token

然后,如果我需要对具有[Authorize]标记的Web API方法进行Ajax调用,我只需将以下头添加到Ajax调用中:

{ "Authorization": "Bearer " + window.authenticationToken }
傅毅然
2023-03-14

null

void EnsureAuthenticated(string role)
{
    string[] parts = UTF8Encoding.UTF8.GetString(Convert.FromBase64String(Request.Headers.Authorization.Parameter)).Split(':');
    if (parts.Length != 2 || !Membership.ValidateUser(parts[0], parts[1]))
        throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "No account with that username and password"));
    if (role != null && !Roles.IsUserInRole(parts[0], role))
        throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "An administrator account is required"));
}

从客户端,这个帮助程序创建一个 ,其中有身份验证头:

static HttpClient CreateBasicAuthenticationHttpClient(string userName, string password)
{
    var client = new HttpClient();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes(userName + ':' + password)));
    return client;
}
司徒光霁
2023-03-14

我感到惊讶的是,在几个小时的谷歌搜索之后,我一直没有找到一个清晰的示例,说明如何从登录屏幕到使用Authorize属性对我的ApiController方法进行用户权限验证。

这是因为你混淆了这两个概念:

>

授权是一种机制,系统通过这种机制来确定特定的经过身份验证的用户应该对系统控制的安全资源拥有何种级别的访问权限。例如,数据库管理系统可以被设计成向某些特定的个人提供从数据库检索信息的能力,但不提供改变存储在数据库中的数据的能力,同时赋予其他个人改变数据的能力。授权系统提供了以下问题的答案:

    执行操作P

MVC中的 属性用于应用访问规则,例如:

 [System.Web.Http.Authorize(Roles = "Admin, Super User")]
 public ActionResult AdministratorsOnly()
 {
     return View();
 }

上述规则将只允许管理员和超级用户角色中的用户访问该方法

还可以使用 元素在web.config文件中设置这些规则。示例:

  <location path="Home/AdministratorsOnly">
    <system.web>
      <authorization>
        <allow roles="Administrators"/>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>

但是,在执行这些授权规则之前,必须对您进行当前网站的身份验证。

尽管这些解释了如何处理未经授权的请求,但它们并没有清楚地演示诸如LoginController之类的东西来请求用户凭据并验证它们。

从这里,我们可以将问题一分为二:

> 用户进行身份验证="" <="">

null

这是一个简单的例子:

<authentication mode="Forms">
  <forms
    protection="All"
    slidingExpiration="true"
    loginUrl="account/login"
    cookieless="UseCookies"
    enableCrossAppRedirects="false"
    name="cookieName"
  />
</authentication>

用户将被重定向到Account/Login路由,在那里您将呈现自定义控件以请求用户凭据,然后您将使用以下方法设置身份验证cookie:

    if (ModelState.IsValid)
    {
        if (Membership.ValidateUser(model.UserName, model.Password))
        {
            FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
            return RedirectToAction("Index", "Home");
        }
        else
        {
            ModelState.AddModelError("", "The user name or password provided is incorrect.");
        }
    }

    // If we got this far, something failed, redisplay form
    return View(model);

跨平台身份验证

null

例如,假设您将从同一网络域(intranet内)上的另一个Web应用程序使用Web API服务,在这种情况下,您可以依赖ASP.NET提供的Windows身份验证。

<authentication mode="Windows" />

null

欲知更多信息,请阅读以下文章:

>

http://codebetter.com/johnvpetersen/2012/04/02/making-your-asp-net-web-apis-secure/

 类似资料:
  • 于是我在这里看到:https://firebase . Google . com/docs/auth/web/account-linking # link-auth-provider-credentials-to-a-user-account现在可以在Firebase中链接用户账号了。我还看到Firebase提供了匿名认证的功能,它为一个用户创建一个用户会话,不需要任何凭证。 在我们的应用程序中,

  • 问题内容: 是否存在node.js的现有用户身份验证库?特别是,我正在寻找可以对用户进行密码身份验证的东西(使用自定义后端身份验证数据库),并将该用户与会话相关联。 在编写身份验证库之前,我认为我会看看人们是否知道现有的库。通过Google搜索找不到任何明显的内容。 -Shreyas 问题答案: 看起来连接中间件的connect-auth插件正是我所需要的:http : //wiki.github

  • 我的代码在这里:代码重新发布是因为我想问一个更直接的问题。如何在未经身份验证的用户和经过身份验证的用户之间切换?我的未经验证的文件似乎已缓存,我使用了以下方法: 在我剩下的api代码之前,它仍然不能工作。谢谢你的帮助 注意:我知道它不起作用,因为我在切换配置/凭据提供程序后立即使用lambda进行调用,并且只有授权用户才能调用此方法。 编辑@behrooziAWS答案: API代码: 完整错误:B

  • 我一直在寻找使用各种AWS服务来处理我们下一个主要项目的基础设施。我们开始研究EC2实例上的docker容器,但在进一步研究AWS Lambda之后,这似乎是一条值得探索的道路。 使用AWS Lambda范例,我们只需使用Lambda函数作为逻辑粘合剂,将数据和事件(来自其他AWS服务)保存在一起。 例如,如果我们产品的用户创建了一个新记录,AWS Lambda可以在该事件中触发,我们可以调用La

  • 我想知道socket.io身份验证的最佳实践是什么。 Alice发出事件'message',参数包括Bobs、唯一标识符等。Bob在监听Socket.on('message')事件时接收消息。

  • 我已经安装了OpenLDAP服务器。 如何在LDAP服务器中添加用户(条目)?以及如何打开该服务器的命令窗口,以便在其上运行ldap命令: :我的要求是:在我的应用程序中,我想对Openldap服务器中添加的用户进行身份验证,但我只能在windows os上安装Openldap服务器,但如何添加用户我无法获得方法。在Windows7操作系统上安装openLDAP whic时添加用户的方法是什么?这