gpt4 book ai didi

c# - 使用来 self 的 API 的访问 token 对 C# MVC Web 应用程序进行身份验证的最佳方法

转载 作者:太空狗 更新时间:2023-10-30 01:35:23 26 4
gpt4 key购买 nike

我有一个构建在 OWINIdentity 之上的 API(我遵循了教程 here)。这很好用,我有一个返回承载 访问 token http://my.domain.com/token 端点。

我现在正在构建一个 MVC 应用程序,它将访问 API 以通过标准 jQuery ajax 调用让用户登录。但是,一旦调用了 http://my.domain.com/token 端点并且从 API 返回了访问 token ,我该如何以我的 MVC 网络应用知道的方式存储这个值用户已通过身份验证?

我希望我的网络应用程序能够利用 MVC Identity 功能,例如角色,这样我就可以执行类似于以下代码的操作:

    [HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}


[Authorize]
public ActionResult CompanySecrets()
{
return View();
}


[Authorize(Users="Stephen")]
public ActionResult StephenSecrets()
{
return View();
}


[Authorize(Roles = "Administrators")]
public ActionResult AdministratorSecrets()
{
return View();
}

}

所以我的问题是:如何存储从我的网络 API 返回的访问 token 并告诉我的 MVC 网络应用程序身份验证成功???

最佳答案

我在一个项目中遇到了同样的情况。就我而言,我已经能够按照本教程实现您可能想要完成的任务:http://bitoftech.net/2015/02/16/implement-oauth-json-web-tokens-authentication-in-asp-net-web-api-and-identity-2/

如果您查看上面的链接,您会发现非常有用的信息以及关于 OAuth 的概念说明(这对我很有帮助)。接下来我做的是使用此配置创建一个 Web 应用程序

    public void ConfigureAuth(IAppBuilder app)
{
// Enable the application to use a cookie to store information for the signed in user
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
});
// Use a cookie to temporarily store information about a user logging in with a third party login provider
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
}

然后,在我的帐户 Controller 中,我只是创建了一个 Microsoft.AspNet.Identity.UserManager 的实例,在 Login 操作中我有这个:

   [HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindAsync(model.UserName, model.Password);
if (user != null)
{
await SignInAsync(user, model.RememberMe);
return RedirectToLocal(returnUrl);
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}

return View(model);
}

此方法的问题是我正在实现的 UserManager 直接进入数据库以查找有关用户的信息。换句话说,我没有使用 API,也没有使用访问 token 。 Web Api 为我提供访问 token ,但我仅将它们用于移动设备和其他东西。

我目前的想法是:

  1. Login 操作中,向 Web Api 发出 http 请求以获取 token
  2. 获得有效 token 后,我可以使用 token 中的信息为当前用户设置 System.Security.Claims.ClaimsIdentity
  3. 然后我可以使用 HttpContext.GetOwinContext().Authentication.SignIn 方法来指示用户已通过身份验证
  4. 最后,我可以使用 HTML5 存储 API 在本地保存 AccessToken 及其刷新 token 。这样我就可以继续直接从 javascript 使用 Web Api 并在我的 Web 应用程序上使用授权功能

这只是我的想法。我仍在研究过程中,但我必须尽快实现一些东西。我希望这可以为您提供更多线索,也许您会想到比这更好的东西(并与我们分享)。

关于c# - 使用来 self 的 API 的访问 token 对 C# MVC Web 应用程序进行身份验证的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26028751/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com