我使用ASP.NET Core v2的AddOpenIdConnect
身份验证扩展方法轻松地与Azure AD提供程序建立OIDC。
这是我在Startup.cs课程中正在做的一个友好的例子。
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(options =>
{
// Setup default schemes...
})
.AddOpenIdConnect("OpenIdConnect-Scheme", "Azure AD", options =>
{
const string clientId = "myClientId";
const string instance = "https://login.microsoftonline.com/";
const string tenantId = "myTenantId";
options.Authority = $"{instance}{tenantId}";
options.ClientId = clientId;
options.UseTokenLifetime = true;
options.CallbackPath = "/signin-oidc";
options.RequireHttpsMetadata = true;
});
// Additional setup
}
由于我们的安全要求,我需要记录 我们的网络应用程序如何验证通过OIDC传回给我们的JWT /令牌没有被截获,被篡改,或伪造"。
ASP.NET Core如何验证权威机构传回的JWT?如果没有处理,我该怎么做呢?
答案 0 :(得分:2)
正如其他人在评论中指出的那样,由于ASP.NET Core是开源的,您可以在GitHub上浏览确切的过程:OpenIdConnectHandler.cs。
通常,它是TLS和(有时)令牌签名验证的组合:
签名验证。在一些流程(例如,混合和隐式)中,验证ID令牌的加密签名。通过OpenID配置发现过程,应用程序将检索(使用TLS)OpenID Discovery文档,其中包括JWKS文档的URL(也使用TLS检索),其中包含身份提供者使用的公钥(Azure AD,in这个案例)。公钥用于验证它确实是签署令牌的受信任机构,并且自签名生成以来内容未被篡改。
注意:某些流程(例如授权代码)不需要令牌签名验证,因为该令牌是作为对受TLS保护的HTTP请求的响应而检索的。
因此,在您的示例中,保护链始于https://
中的"https://login.microsoftonline.com/..."
。 OpenID Discovery端点基于此构建(https://login.microsoftonline.com/{tenant-id}/.well-known/openid-configuration
)。这将返回其他受TLS保护的端点,用于登录,令牌颁发和用于签名验证的公钥。