2015-02-08 51 views
8

我遇到问题,而集成外部提供商,即谷歌与Thinktecture身份服务器v3。我得到以下错误:“客户端应用程序不知道或未被授权。 做任何人有任何关于这个错误的想法。Thinktecture Identity server v3谷歌提供商

+0

我有同样的问题 – akokani 2015-02-10 15:03:48

回答

0

看起来像客户端(您希望可以使用Google登录的应用程序)未在客户端商店中注册。请问您能否显示您的启动配置?

+0

不是我的问题,但我确实有同样的错误。在下面粘贴我的代码,因为评论无法实现。 – Whoever 2015-02-27 22:56:02

16

@无论如何,它看起来像在客户端和服务器上的RedirectUri值不匹配。

客户端启动时的RedirectUri属性定义了在身份服务器进行身份验证后将被调用的URI。服务器配置中的RedirectUris定义了可以请求认证的允许URI的列表。客户端启动RedirectUri必须包含在服务器的RedirectUris列表中。

看起来您的客户端的RedirectUri目前正指向服务器的URI。您的客户端是否在端口46289上运行?如果是这样,请尝试将客户端启动时RedirectUri属性的值更改为https://localhost:46289。假设您的客户端真的可以通过https访问,您可能还想尝试修改服务器的redirectUris值以使用https而不是http。

服务器客户商店:

public static IEnumerable<Client> Get() 
{ 
    return new[] { 
     new Client { 
      Enabled = true, 
      ClientName = "MVC Client", 
      ClientId = "mvc", 
      Flow = Flows.Implicit, 

      RedirectUris = new List<string>{ 
       "https://localhost:46289/" // client home url 

客户端启动:

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

    app.UseOpenIdConnectAuthentication(
     new OpenIdConnectAuthenticationOptions { 
      Authority = "https://localhost:44300/identity", 
      ClientId = "mvc", 
      RedirectUri = "https://localhost:46289/", //must be in server's Client.RedirectUris 
      ResponseType = "id_token", 

      SignInAsAuthenticationType = "Cookies" 
    }); 
+0

尝试了两个,更改重定向uri和https,仍然是相同的错误。在添加客户端相关的nuget包时也注意到,它进行了很多修改,这些修改不在Thinktecture下载的MVC示例中。不知道为什么他们将服务器和客户端代码放在同一个样本中,我甚至不知道服务器端和客户端在哪里开始,可能错过了其他地方重要的东西。猜猜我必须回到没有MVC的更简单的例子重新开始。谢谢你的帮助。 – Whoever 2015-03-02 20:52:45

+0

你看过http://identityserver.github.io/Documentation/docs/overview/simplestOAuth.html上的示例吗?这在同一个解决方案中有一个自己托管的服务器,一个web api和一个控制台。我_think_通过从http://列出的两个“Getting Started”示例中的每一个中选择一个项目,我得到了当前示例(一个自托管服务器和一个IIS中的mvc网站,每个都位于其自己的.sln中) identityserver.github.io/Documentation/docs/,然后做一些微小的调整,例如关闭服务器端的SSL,并按照上文所述调整服务器/客户端配置中的URI。 – BinaryMash 2015-03-03 22:26:43

+0

是的,我刚刚完成了这一步。它有服务器,Web API和客户端。但在MVC示例中,它从服务器跳转到添加cookie和openidconnect软件包,然后将[授权]添加到控制器。我无法分辨服务器端和客户端在哪里开始。我将服务器部分留在一个空项目中,然后创建一个单独的MVC项目,并从cookie/openid步骤开始,并获得该客户端未知错误。不知道我是否正确理解整个事情。我现在要回去检查一下网络托管的服务器示例,也许是一些个人客户端。似乎需要学习很多。 – Whoever 2015-03-04 04:20:21

2

我已经工作过同样的问题,但只是针对身份验证服务器的身份(谷歌是未来解决我的名单上) 。我看到了这个问题,因为客户端的范围没有在Mvc和Server上设置。要解决我添加了作用域到启动类的问题(MVC的客户端)如下:

public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions 
     { 
      Authority = "https://localhost:44301", 
      Scope = "openid profile email roles", 
      ClientId = "mvc", 
      RedirectUri = "https://localhost:44300/", 
      ResponseType = "id_token", 

      SignInAsAuthenticationType = "Cookies" 
     }); 

     app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AuthenticationType = "Cookies" 
     }); 
    } 
} 

..和也是在客户端的服务器的列表:

public static class Clients 
{ 
    public static IEnumerable<Client> Get() 
    { 
     return new[] 
     { 
      new Client 
      { 
       Enabled = true, 
       ClientName = "MVC Client", 
       ClientId = "mvc", 
       Flow = Flows.Implicit, 
       RequireConsent = true, 
       RedirectUris = new List<string> 
       { 
        "https://localhost:44300/" 
       }, 
       PostLogoutRedirectUris = new List<string> 
       { 
        "https://localhost:44300/" 
       }, 
       AllowedScopes = new List<string> { 
        Constants.StandardScopes.OpenId, 
        Constants.StandardScopes.Profile, 
        Constants.StandardScopes.Email, 
        Constants.StandardScopes.Roles 
       } 
      } 
     }; 
    } 
} 

在相对于OP向Google提出的问题可能值得检查一下您的范围是否与Google开发者控制台中的应用设置支持的范围相关。有一个很好的SO张贴在支持范围在Where can I find a list of scopes for Google's OAuth 2.0 API?

希望帮助:)

6

我有这个问题。服务器中的RedirectUris条目几乎与在客户端Startup.Configuration中与RedirectUri匹配;除了最后的斜线外。

https://localhost:46289/ 

是不一样的

https://localhost:46289 

当我加斜杠,我的登录页面出现。

+0

我犯了同样的错误...... :) – 2015-12-03 14:16:30

+0

这个匹配是一个精确的字符串匹配(不区分大小写),而不是使用Uri类的更聪明的东西! – Lukos 2016-02-02 11:39:20

0

就我而言,我是不小心,并改变Startup.cs UseOpenIdConnectAuthentication下的数值(这是什么集成的Web应用程序使用连接到它)当我应该已在客户端改变的值。 Get(),这是服务器配置的允许的客户端。

一旦我解决了这些问题,我能够将客户端和服务器分成两个应用程序,只有一些NuGet包和UseCookieAuthentication/UseOpenIdConnectAuthentication在客户端应用程序中。

如果客户端未启用,重定向URI不匹配列表中的一个(使用不区分大小写的精确匹配),请求的作用域不在允许的作用域列表中,如果该流程请求不符合允许的内容(每个客户端只能有一个)和/或客户端ID不匹配。