我有一个很棒的样板“ASP.NET核心Web应用程序(.NET Framework)”应用程序,它应该成为一个REST API,在Azure上托管,用于网站&移动应用。
我想通过标头为它配备令牌认证,我选择了OpenIdConnect包。
我已将此页面中的代码段(https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server)复制到我的模板中,并添加了app.UseOAuthValidation()调用,因此代码如下所示:
cat(as.html(vanilla.table(iris)))
我可以获得一个令牌(POST到/ connect / token)。
如果我将我的ValuesController的[Authorize]添加到GET并使用令牌设置Authorization标头,但我继续获得401 Unauthorized。代码甚至不会侵入OnValidateTokenRequest或OnHandleTokenRequest方法。
我错过了什么?
答案 0 :(得分:0)
你这样做有点不对。
让我解释一下。您的REST API不是OpenIDConnect服务器。它应该只验证给它的一个令牌。
本文看起来很不错:https://contos.io/protecting-a-net-core-api-with-azure-active-directory-59bbcd5b3429#.1w8djbaci此示例使用Azure AD,但由于您在Azure上托管,我认为这对您来说是个不错的选择。
简而言之,您需要在API中使用以下内容:
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
Authority = Configuration[“Authentication:AzureAd:AADInstance”]
+ Configuration[“Authentication:AzureAd:TenantId”],
Audience = Configuration[“Authentication:AzureAD:ClientId”],
TokenValidationParameters =
new Microsoft.IdentityModel.Tokens.TokenValidationParameters
{
ValidIssuer =
Configuration [“Authentication:AzureAd:AADInstance”]
+ Configuration[“Authentication:AzureAd:TenantId”] + “/v2.0” }
});