Identity Server 4 用户管理API

3
我已经成功地将单页应用程序项目(ReactJS)、运行在ASP.net Core项目上的API以及IdentityServer 4项目的解决方案整合起来。
我希望能够从单页应用程序项目中调用IdentityServer 4项目上的API。
我在IdentityServer 4应用程序中创建了一个简单的控制器类,并添加了授权属性。但是,如果我通过Postman调用它,会返回登录页面的HTML。
这发生在我已经在API上登录并使用相同令牌后。
我该如何登录到身份验证服务器以调用其管理用户的功能?

1
你应该展示相关的代码。请参考:https://stackoverflow.com/help/how-to-ask 具体而言,请查看:https://stackoverflow.com/help/mcve - user1531971
1个回答

2

正如评论中所述,您应该在问题中添加更多信息。您的控制器是身份验证服务器的mvc应用程序的一部分吗?您是否使用AspnetCore.Identity?

如果是这样,您的控制器受AspnetCore.Identities的cookie身份验证方案的保护。您需要发送cookie才能访问控制器。这与身份验证服务器无关,因为您位于本地MVC应用程序上,它只是普通的MVC。

Postman发送cookie时会出现问题,您需要拦截器Chrome扩展程序。您还需要通过Postman登录。

如果SPA由同一MVC应用程序托管,则可能会起作用。如果不是,则需要配置您的mvc应用程序以验证访问令牌(而不仅仅是发放它们),例如:

// Adds IdentityServer
app.UseIdentityServer();

// Accept access tokens from identity server
app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
    Authority = "http://localhost:5000",
    RequireHttpsMetadata = false,
    AuthenticationScheme = "Bearer"

    ApiName = "api1"
});

这样,您可以通过身份验证服务器请求用于本地api的访问令牌,(您还需要为“api1”配置api范围)。
要在您的Api控制器中验证它们,请将以下内容添加到您的控制器中:
    [Authorize(ActiveAuthenticationSchemes = "Bearer")]
    [HttpGet]
    public string Bearer()
    {
        return "Access Token Accepted";
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接