Identity Server 3 - 客户端应用程序未知或未经授权

时间:2016-06-06 15:31:46

标签: asp.net-mvc oauth oauth-2.0 openid-connect identityserver3

我收到错误'客户端应用程序未知或未经授权。访问我网站的受保护区域时。

这是我的客户:

public static class Clients
{
    public static IEnumerable<Client> Get()
    {
        return new[]
        {
            new Client
            {
                Enabled = true,
                ClientName = "Web Application",
                ClientId = "webapplication",
                Flow = Flows.AuthorizationCode,

                ClientSecrets = new List<Secret>
                {
                    new Secret("webappsecret".Sha256())
                },

                RedirectUris = new List<string>
                {
                    UrlManager.WebApplication
                },
                PostLogoutRedirectUris = new List<string>
                {
                    UrlManager.WebApplication
                },

                AllowedScopes = new List<string>
                {
                    Constants.StandardScopes.OpenId,
                    Constants.StandardScopes.Profile,
                    Constants.StandardScopes.Email,
                    Constants.StandardScopes.Roles,
                    Constants.StandardScopes.OfflineAccess,
                    "read",
                    "write"
                }
            }
        };
    }
}

这是我的网络应用程序启动:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = "Cookies"
        });

        app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
        {
            Authority = UrlManager.AuthenticationService + "identity",

            ClientId = "webapplication",
            Scope = "openid profile",
            ResponseType = "code id_token",
            RedirectUri = UrlManager.WebApplication,

            SignInAsAuthenticationType = "Cookies"
        });
    }
}

这是我的身份验证服务(安装了IDS3)启动:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.Map("/identity", idsrvApp =>
        {
            idsrvApp.UseIdentityServer(new IdentityServerOptions
            {
                SiteName = "Authentication Service - Embedded IdentityServer",
                SigningCertificate = Certificate.LoadCertificate(),

                Factory = new IdentityServerServiceFactory()
                            .UseInMemoryUsers(Users.Get())
                            .UseInMemoryClients(Clients.Get())
                            .UseInMemoryScopes(Scopes.Get())
            });
        });
    }
}

这是UrlManager:

public static class UrlManager
{
    public static string WebApplication
    {
        get { return "https://localhost:44381/"; }
    }

    public static string AuthenticationService
    {
        get { return "https://localhost:44329/"; }
    }
}

这是我的家庭控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [Authorize]
    public ActionResult Private()
    {
        return View((User as ClaimsPrincipal).Claims);
    }
}

当我访问Private时,我会收到一个Identity Server 3屏幕,其中显示错误消息“客户端应用程序未知或未经授权。”

我已经读过这可能来自重定向URI中的错误匹配,但据我所知,我的是正确的。我不知道还有什么可以导致它。如果我将流程更改为隐式但我想实现AuthorizationCode流程,则应用程序可以正常工作。

文档似乎也没有说明这一点。

3 个答案:

答案 0 :(得分:10)

客户端已配置授权代码流程

  

Flow = Flows.AuthorizationCode

但启动时的响应类型设置为混合流。

  

ResponseType =“code id_token”

尝试将此更改为

  

ResponseType =“code”(或将Flow类型更改为Hybrid)

下面是ResponseType列表和相应的Flow enter image description here

答案 1 :(得分:2)

我收到此错误,问题在于RedirectUri。 在授权服务器中 http://localhost:56840/ ,在Web应用中 http://localhost:56840 。 注意缺少的&#34; /&#34;在网址的末尾。

答案 2 :(得分:0)

如果您的 ClientUri 域名与您的 ClientRedirectUri 域名不匹配,也会发生这种情况。

看到我有这个问题是因为缺少“www”。在客户端重定向 uri 中。

问题 - ClientRedirectUri 没有“www”。其中:

ClientUri: https://www.mydomainname.co.uk

ClientRedirectUri: https://mydomainname.co.uk/umbraco/surface/UmbracoIdentityAccount/ExternalLoginCallback

解决方案 - ClientRedirectUri 有“www”。在其中,就像 ClientUri 一样:

ClientUri: https://www.mydomainname.co.uk

ClientRedirectUri: https://www.mydomainname.co.uk/umbraco/surface/UmbracoIdentityAccount/ExternalLoginCallback