使用OpenIdConnect为ASP.NET Core上的移动应用和网站提供经过身份验证的REST API

时间:2016-11-09 21:16:31

标签: rest azure asp.net-identity openid

我有一个很棒的样板“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方法。

我错过了什么?

1 个答案:

答案 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” }
});