同一项目中的IdentityServer4和Web API

时间:2018-06-27 17:03:14

标签: asp.net-mvc asp.net-core asp.net-web-api2 identityserver4

我有一个 IdentityServer 和一个 MVC客户端,IdentityServer拥有自己的Web API,可以为其客户端提供用户管理。 MVC客户端使用HybridAndClientCredentials授予类型与IdentityServer进行交互。验证客户端用户没有问题。问题是当我尝试通过身份验证的用户从IdentityServer调用某些API时,服务器返回登录视图而不是API的结果。

这是我的客户端配置:

new Client
{
    ClientId = "mvc.identity.management",
    ClientName = "Identity Management",
    AllowedGrantTypes = GrantTypes.Hybrid,

    RequireConsent = false,

    ClientSecrets =
    {
        new Secret("somesecret".Sha256())
    },

    RedirectUris = { "http://localhost:5001/signin-oidc" },
    PostLogoutRedirectUris = { "http://localhost:5001/signout-callback-oidc" },

    AllowedScopes =
    {
        IdentityServerConstants.StandardScopes.OpenId,
        IdentityServerConstants.StandardScopes.Profile
    }
}

和客户

    JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

    services.AddAuthentication(options =>
    {
        options.DefaultScheme = "Cookies";
        options.DefaultChallengeScheme = "oidc";
    })
    .AddCookie("Cookies")
    .AddOpenIdConnect("oidc", options =>
    {
        options.SignInScheme = "Cookies";

        options.Authority = "http://localhost:5000";
        options.RequireHttpsMetadata = false;

        options.ClientSecret = "somesecret";
        options.ResponseType = "code id_token";
        options.GetClaimsFromUserInfoEndpoint = true;

        options.ClientId = "mvc.identity.management";
        options.SaveTokens = true;
    });

任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:0)

也许为时已晚,但其他人可能会提出这个问题。 解决方案是使用 LocalApi,它是 IdentityServer4 的内置功能。 您创建一个 LocalApi 并使用自定义范围对其进行授权,您的客户应添加该范围 IdentityServerApi。 完整资源可在此处获得: https://docs.identityserver.io/en/latest/topics/add_apis.html