2017-08-24 78 views
2

我设法使用单个页面应用程序项目(ReactJS),在ASP.net Core项目上运行的API和IdentityServer 4项目获得解决方案。Identity Server 4用户管理API

我希望能够从单页应用程序项目调用IdentityServer 4项目的API。

我使用authorize属性在IdentityServer 4应用程序中创建了一个简单的控制器类。但是,如果我通过Postman调用它,则会返回登录页面的HTML。

这种情况发生在我已经登录API并且使用相同的标记之后。

我该如何登录到身份服务器来拨打电话来管理用户?

+0

您应该显示相关的代码。请参阅:https://stackoverflow.com/help/how-to-ask具体来说:https://stackoverflow.com/help/mcve – jdv

回答

1

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

如果是这样,您的控制器受到AspnetCore.Identities的Cookie认证方案的保护。你需要发送cookie来访问控制器。这与身份服务器无关,因为您在本地MVC应用程序中,它只是普通的vanilla MVC。

邮差有问题发送cookie,你需要interceptor chrome extension。你也需要通过邮递员登录。

如果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"; 
    }