在这种情况下,我让用户登录(MVC 5)Web 应用程序,然后该应用程序充当代理以登录(Web API 2)API(使用基于 SSL 的基本)并返回承载/访问令牌。我正在使用 Thinktecture.IdentityModel.Client.OAuth2Client 处理登录并获取访问令牌,一切正常。
发生了一些其他事情,但现在我希望 Web 应用程序能够解码访问令牌以访问 API 上设置的声明(特别是登录 API 后返回的用户 ID)。
我正在使用经过大量演示的UseOAuthAuthorizationServer
扩展UseOAuthBearerAuthentication
方法,其令牌端点几乎是开箱即用的,但可以自定义OAuthAuthorizationServerOptions.Provider
访问我自己的存储库。
我在两个应用程序上都有相同的 MachineKey,但我不清楚如何解码令牌,尽管我知道我可能不得不使用该SecureDataFormat.Unprotect
方法。
我在 Web 应用程序中最接近的尝试是:
Task<TokenResponse> response = client.RequestResourceOwnerPasswordAsync(model.Email, model.Password);
IDataProtector dataProtecter = Startup.DataProtectionProvider.Create("does this matter?");
TicketDataFormat ticketDataFormat = new TicketDataFormat(dataProtecter);
AuthenticationTicket ticket = ticketDataFormat.Unprotect(response.Result.AccessToken);
使用 Startup.DataProtectionProvider 设置如下:
public partial class Startup
{
internal static IDataProtectionProvider DataProtectionProvider { get; private set; }
public void Configuration(IAppBuilder app)
{
DataProtectionProvider = app.GetDataProtectionProvider();
this.ConfigureAuth(app);
}
}
我的后备计划是提供一种 API 方法,该方法在登录后返回我感兴趣的信息,但看起来似乎太过分了,因为它构成了令牌中声明的一部分(据我所知)。
我试图围绕 JWT(我查看过 Thinktecture、Microsoft 源代码和其他各种论坛)展开思考,但不确定这是否会有所帮助(尽管以纯文本形式提供的声明对我们很有用)。我还没有找到一个允许使用基本身份验证登录并返回包含访问令牌的自定义 JWT 的示例。
无论如何,我希望那是足够的信息和任何帮助将不胜感激......干杯