验证资源服务器上的访问令牌并相应地响应

时间:2015-06-23 23:24:15

标签: asp.net openid asp.net-core openid-connect

我们已经询问并收到了有关如何执行资源所有者密码凭据流程的答案。 Configure the authorization server endpoint我们可以从Identity Server接收访问令牌,并将其存储在依赖方的数据存储中。

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

在我们的资源服务器的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.";
    }
}

1 个答案:

答案 0 :(得分:1)

应该非常简单:

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.";
    }
}