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

问题描述:

我有以下设置。使用asp.net web api令牌在mvc网站上进行身份验证

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

然后,我的门户网站托管在asp.net mvc 5项目上,该项目使用标准Cookie身份验证。

现在在某些情况下,我的移动应用需要从mvc 5门户网站加载网页。例如我们的付款网关页面。但客户端需要进行身份验证才能加载此页面。

当我们向用户展示Web门户网站的时候。它要求他们再次登录。这是非常糟糕的用户体验。

我如何可以验证客户端上的MVC网站,用我的web api Token

我想象这样的功能在MVC网站:

pubic Action LogInWithToken(String token) 
{ 
var user = GetUserFromToken(token); 
var isAllowed = AuthenticateUserFromToken(user,token); 
if(!isAllowed) return 401; 
return CreateCookieForUser(user); 
} 
+0

您可以使用自定义授权属性,您可以在其中检查请求数据以及是否存在令牌,然后验证用户。检查[这里](https://msdn.microsoft.com/en-us/library/ee707357(v = vs.91).aspx)并在这方面进行搜索。 –

+1

可能的重复 - https://stackoverflow.com/questions/38661090/token-based-authentication-in-web-api-without-any-user-interface –

+0

@SivaGopal是的,我可以做到这一点。但你如何解密令牌?我仍然需要一种方法来获取'string token'并从令牌获取用户和时间戳。 – Zapnologica

是在托管的Web阿比2应用程序与MVC 5应用程序相同的机器?

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

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

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

+0

他们托管在天蓝色的web服务上,我很想设计一个横向扩展的服务器,所以我不想依赖他们是同一台机器。您发送的链接要求我们更改API令牌以使用JWT。我怎样才能使用标准的API令牌来做到这一点。 – Zapnologica