带Asp.net的Identity Server 4(.Net Framework 4.7.2)如何修复“客户端无效的授予类型”

时间:2019-07-17 01:20:23

标签: asp.net identityserver4

我正在使用IdentityServer4和Asp.Net MVC(.net框架)。授权后,我的站点可以导航到Identity Server,但出现错误:客户端的授予类型无效。我该如何解决?给我这个组合的样本。非常感谢。

身份服务器客户端配置

{
      "ClientId": "nfc",
      "ClientName": ".net framework client",

      // 5AF90EA2-CA6E-4AF9-AC1C-EAC72933D20D
      "ClientSecrets": [ { "Value": "bBsQFRHNGCMB6W3EdybGe/lO8iOawFpeQ2ipC+nhGVM=" } ],
      "AllowedGrantTypes": [ "client_credentials" ],
      "AllowedScopes": [ "openid", "profile" ],
      "AllowOfflineAccess": true,

      "RedirectUris": [ "http://localhost:44398/signin-oidc" ],
      "FrontChannelLogoutUris": [ "http://localhost:44398/signout-oidc" ],
      "PostLogoutRedirectUris": [ "http://localhost:44398/signout-callback-oidc" ]
    },

Asp.net客户端启动程序

[assembly: OwinStartup("ProductionConfiguration", typeof(NetFrameworkClient.Startup))]

namespace NetFrameworkClient
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=316888
            app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

            app.UseCookieAuthentication(new CookieAuthenticationOptions { });

            app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
            {
                AuthenticationType = "oidc",
                SignInAsAuthenticationType = "Cookies",
                Authority = "http://localhost:5000/",
                RedirectUri = "http://localhost:44398/signin-oidc",
                PostLogoutRedirectUri = "http://localhost:44398/signout-callback-oidc",
                ClientId = "mvc",
                ResponseType = "id_token",
                Scope = "openid profile",
                UseTokenLifetime = false,
                RequireHttpsMetadata = false,
                Notifications = new OpenIdConnectAuthenticationNotifications
                {
                    SecurityTokenValidated = (context) =>
                    {
                        var identity = context.AuthenticationTicket.Identity;
                        var name = identity.Claims.FirstOrDefault(c => c.Type == identity.NameClaimType)?.Value;

                        return Task.FromResult(0);
                    }
                }
            });
        }
    }
}

在控制器上授权

[Authorize]
public ActionResult Index()
{
    return View();
}

我得到的错误:对不起,出现了一个错误:authorized_client 客户的授权类型无效

3 个答案:

答案 0 :(得分:0)

第一个步骤与该问题无关。它显示了另一个客户端"ClientId": "nfc"的配置,它与第二个块mvc的客户端无关。

假设您正在使用samples中的mvc客户端,那么这可能是混合流程。在这种情况下,ResponseType应该为“代码id_token”。

ResponseType = "code id_token",

答案 1 :(得分:0)

它不起作用,因为在身份服务器配置中,客户端ID为“ nfc”,而在.NET应用程序的配置中,您将客户端ID指定为“ mvc”。

为使您的.net应用程序通过Identity Server授权,需要回传一个有效的客户端ID。

您可以在文档中找到更多信息:http://docs.identityserver.io/en/latest/quickstarts/1_client_credentials.html

希望有帮助!

答案 2 :(得分:0)

不确定是否对您有用,但对我有用:MVC 4.7.2具有“ GrantType”:“ hybrid” 所以我将IdentityServer4中的设置更改为“ AllowedGrantTypes”:[“ hybrid”]