使用 asp.net web api 令牌在 mvc 网站上进行身份验证

Posted

技术标签:

【中文标题】使用 asp.net web api 令牌在 mvc 网站上进行身份验证【英文标题】:use asp.net web api token to authenticate on mvc web site 【发布时间】:2017-11-21 04:45:30 【问题描述】:

我有以下设置。

2 个移动应用程序与 asp.net web api 2 项目通信,它们使用 Token Authentication。每个移动客户端都存储令牌客户端,而不是用户名和密码。

然后我将我的门户网站托管在使用标准 cookie 身份验证的 asp.net mvc 5project 上。

现在,在某些情况下,我的移动应用程序需要从 mvc 5web 门户加载网页。例如我们的支付网关页面。但是客户端需要经过身份验证才能加载此页面。

当我们向用户展示一个 web 包装的 web 门户时。它要求他们再次登录。这是非常糟糕的用户体验。

如何使用我的web api Token 对 MVC 站点上的客户端进行身份验证

我在 MVC 站点中想象这样一个函数:

pubic Action LogInWithToken(String token)

var user = GetUserFromToken(token);
var isAllowed = AuthenticateUserFromToken(user,token);
if(!isAllowed) return 401;
return CreateCookieForUser(user);

【问题讨论】:

您可以使用自定义授权属性来检查请求数据,如果令牌存在则验证用户。检查here并在这方面进行搜索。 可能重复-***.com/questions/38661090/… @SivaGopal 是的,我可以做到。但是你如何解密令牌?我仍然需要一种方法来获取string token 并从令牌中获取用户和时间戳 【参考方案1】:

Web Api 2 应用程序是否与 MVC 5 应用程序托管在同一台机器上?

如果是,您可以手动反序列化令牌以获取用户的 id。见Extract User details from web api auth token in MVC。

从那里,您可以在 CookieAuthentication 中自动登录用户。

但是,如果它们托管在不同的机器上,则必须在项目的 Web.Config 文件中指定相同的机器密钥。

【讨论】:

它们托管在 azure web 服务上,设计明智我希望它们能够水平扩展,所以我不想依赖它们是同一台机器。您发送的链接要求我们更改 API 令牌以使用 JWT。如何使用标准 API 令牌做到这一点。

以上是关于使用 asp.net web api 令牌在 mvc 网站上进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC Web API 身份验证令牌安全问题

使用 asp.net web api 令牌在 mvc 网站上进行身份验证

重用令牌 asp.net web api c#

ASP.net core web api:使用 Facebook/Google OAuth 访问令牌进行身份验证

基于.Net Framework 4.0 Web API开发:ASP.NET Web APIs 基于令牌TOKEN验证的实现

web api - asp.net 身份令牌即使对于后续请求也会过期