【发布时间】:2017-03-11 18:49:33
【问题描述】:
我正在 ASP.NET Core 1.0.1 应用程序上实现安全性,该应用程序用作 Web API。我正在尝试了解是否以及如何实施 2 种不同的身份验证方案。
理想情况下,我希望允许通过 Azure Active Directory 或通过用户名/密码对联系应用程序的特定后端服务进行身份验证。
是否可以为端点通过 Azure AD 或 JWT 令牌进行身份验证的设置配置 ASP.NET Core?
我尝试过这样的事情,但是在调用生成令牌端点时,我得到一个 500 并且完全没有任何信息。删除 Azure AD 配置可使端点完美运行:
services.AddAuthorization(configuration =>
{
configuration.AddPolicy("Bearer", new AuthorizationPolicyBuilder()
.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
.RequireAuthenticatedUser().Build());
configuration.AddPolicy("OpenIdConnect", new AuthorizationPolicyBuilder()
.AddAuthenticationSchemes(OpenIdConnectDefaults.AuthenticationScheme)
.RequireAuthenticatedUser().Build());
});
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
ClientId = Configuration["Authentication:AzureAD:ClientId"],
Authority
= Configuration["Authentication:AzureAd:AADInstance"]
+ Configuration["Authentication:AzureAd:TenantId"],
ResponseType = OpenIdConnectResponseType.IdToken,
SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme
});
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
TokenValidationParameters = new TokenValidationParameters
{
ClockSkew = TimeSpan.FromMinutes(1),
IssuerSigningKey = TokenAuthenticationOptions.Credentials.Key,
ValidateAudience = true,
ValidateIssuer = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidAudience = TokenAuthenticationOptions.Audience,
ValidIssuer = TokenAuthenticationOptions.Issuer
}
});
【问题讨论】:
-
OpenIdConnect 身份验证需要 Cookie 身份验证。像这样github.com/aspnet/Security/blob/dev/samples/OpenIdConnectSample/…
-
不清楚您要做什么。您写道,“端点通过 Azure AD 或 JWT 令牌进行身份验证......” 对于 JWT 令牌部分,用户从哪里获得 JWT 令牌?对于通过 Azure AD 部分,您的意思是在用户缺少令牌时将用户重定向到 Azure AD 吗?
-
@ShaunLuttin AAD 令牌必须来自 AAD,是的,应用程序应该重定向它们。 JWT 令牌在我创建的端点(控制器操作)处生成
标签: c# authentication asp.net-core jwt azure-active-directory