我在asp.net webforms和经典asp中有一些网站。我收到来自api网关的请求,处理登录并在标题中包含一个jwt标记。
在我的网站上,我使用Owin和JWTBearerAuthentication来验证jwt令牌并拒绝错误请求。 这项工作非常顺利。
现在,如果jwt有效,我必须计算其他自定义声明(例如从数据库中获取的角色)并将它们存储在cookie中,这样我就不必在每个请求中执行此操作。
当然,我需要在asp.net webforms和经典的asp站点中访问这些声明。
这是启动类,带有令牌验证方法
[assembly: OwinStartup(typeof(WebForms.Startup))]
namespace WebForms
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureTokenConsumption(app);
}
private void ConfigureTokenConsumption(IAppBuilder app)
{
//Read parameters in config file
string issuer = ConfigurationManager.AppSettings["as:Issuer"];
string audience = ConfigurationManager.AppSettings["as:Audience"];
string certificat = ConfigurationManager.AppSettings["Certificat"];
X509Certificate2 cert = new X509Certificate2();
byte[] raw = GetBytes(certificat);
cert.Import(raw);
X509Store store = new X509Store(StoreName.CertificateAuthority, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
//prepare token validation options
var options = new JwtBearerAuthenticationOptions { AuthenticationMode = AuthenticationMode.Active };
options.TokenValidationParameters = new TokenValidationParameters
{
ValidAudiences = new[] { audience },
ValidIssuer = issuer,
IssuerSigningToken = new X509SecurityToken(cert),
RequireExpirationTime = true,
ValidateAudience = true,
ValidateLifetime = false,
ClockSkew = new TimeSpan(0)
};
//Add in owin pipeline
app.UseJwtBearerAuthentication(options);
}
/// <summary>
/// string to bytes conversion
/// </summary>
/// <param name="str"></param>
private byte[] GetBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}
}
}
基本上,当jwt有效时,我必须获得自定义声明,并将它们添加到cookie中,除非cookie仍然可用。然后,我想在我的网站中以主体或身份找到所有声明。
我在网上搜索并找到了在登录页面中创建cookie的示例。由于我没有处理登录过程,因此我没有登录页面。我想我必须在管道中插入,但是如何?
我找到了像UseExternalSignInCookie和UseCookieAuthentication这样的东西,它的用途是什么?我应该使用哪一个?我可以挂钩自定义代码吗?
由于