如何使用owin和Mvc 5从httpcontext获取访问令牌

时间:2017-09-20 10:04:46

标签: c# asp.net-identity owin asp.net-mvc-5.2

我在IdentityServer 4中实施了IDP。我的Web应用程序客户端(在Mvc 5中实现)使用IDP进行身份验证,但现在我需要从请求中获取访问令牌。 在.Net Core中执行此操作的方法是使用Microsoft.AspNetCore.Authentication.AuthenticationTokenExtensions,如此:

HttpContext.Authentication.GetTokenAsync("acccess_token")

我希望能够在我的.net Mvc5 Web应用程序客户端中执行相同操作,但我找不到任何具有类似实现的nuget包或命名空间。能够在MVC5而不是.net Core中执行此操作非常重要。以前有人遇到过这个吗?

PS-另外值得一提的是我正在使用OpenIdConnect

2 个答案:

答案 0 :(得分:2)

在您的控制器中,您可以使用以下代码获取令牌:

var token = ActionContext.Request.Headers.Authorization.Parameter;

答案 1 :(得分:1)

最近发布的4.1.0 version of Katana现在支持SaveTokens property(从ASP.NET Core反向移植)。

为了获取访问令牌:

  1. Microsoft.Owin.Security.OpenIdConnect软件包更新为4.1.0(或更高版本)
  2. 在启动类中配置SaveTokens
app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
    // Other options removed for readability
    SaveTokens = true,

    // Required for the authorization code flow to exchange for tokens automatically
    RedeemCode = true
});
  1. 在控制器中读取访问令牌:
var result = await Request.GetOwinContext().Authentication.AuthenticateAsync("Cookies");
string token = result.Properties.Dictionary["access_token"];