在资源服务器上验证访问令牌并做出相应响应

Validate an Access Token at the Resource Server and Respond Accordingly

我们已经询问并收到了有关如何执行资源所有者密码凭据流程的答复。 我们能够从身份服务器接收访问令牌并将其存储在依赖方的数据存储中。

我们现在需要学习如何在资源服务器上验证访问令牌。

在我们资源服务器的 Startup 中,我们目前有这个:

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication();
}

public void Configure(IApplicationBuilder app)
{
    // Add a new middleware validating access tokens issued by the server.
    app.UseOAuthBearerAuthentication(options =>
    {
        options.AutomaticAuthentication = true;
        options.Audience = "http://localhost:50000/";
        options.Authority = "http://localhost:50000/";
    });

    app.Run(async (context) =>
    {
        // this runs on each request not just per application startup
        await context.Response.WriteAsync(DateTime.Now.ToString() + 
            " Hello Resource Owner Password Flow...");
    });
}

我们需要在资源服务器中添加什么,比如 Controller/Action,以检查访问令牌验证是否成功?例如。在伪代码中:

public string MyAction()
{
    if(AccessTokenIsValid())
    {
        return "one thing.";
    } 
    else
    {
        return "another.";
    }
}

应该超级简单:

public string MyAction()
{
    if (User.Identity.IsAuthenticated)
    {
        return "one thing.";
    } 
    else
    {
        return "another.";
    }
}

您还可以使用新方法 ASP.NET 5 个好处,这基本上是相同的代码段迭代 ClaimsPrincipal 的不同身份以确定是否存在经过身份验证的身份。

public string MyAction()
{
    if (User.Identities.Any(identity => identity.IsAuthenticated))
    {
        return "one thing.";
    } 
    else
    {
        return "another.";
    }
}