IdentityServer4与谷歌移动应用认证?

IdentityServer4与谷歌移动应用认证?,identityserver4,Identityserver4,我已经设法让我的IS4与Google web应用程序身份验证一起工作 services.AddAuthentication() .AddGoogle("Google", o => { o.SignInScheme = IdentityServer4.IdentityServerConstants.ExternalCookieAuthenticationScheme; o.ClientId =

我已经设法让我的IS4与Google web应用程序身份验证一起工作

services.AddAuthentication()
        .AddGoogle("Google", o =>
        {
            o.SignInScheme = IdentityServer4.IdentityServerConstants.ExternalCookieAuthenticationScheme;
            o.ClientId = "11111.apps.googleusercontent.com";
            o.ClientSecret = "1231231";
        });
现在,我如何添加移动应用程序

我已经尝试过将ClientId更改为使用从Google控制台获得的新的ClientId。删除了ClientSecret(因为对于移动应用程序,没有给出任何机密)。使用相同的ExternalCookieAuthScheme。我得到了一个错误,因为必须提供“ClientSecret”。那我怎么才能让它工作呢


此处显示客户端凭据:

        o.ClientId = "11111.apps.googleusercontent.com";
        o.ClientSecret = "1231231";
仅在IdentityServer和Google之间,不应存储在移动客户端中

移动应用程序中使用的clientid+密码可在IdentityServer中移动应用程序的客户端定义中找到

在本例中,谷歌并不关心用户是否使用web应用程序或客户端应用程序进行身份验证。谷歌只会看到用户通过IdentityServer尝试登录。所以谷歌完全不知道什么样的应用程序在使用IdentityServer

因此,在IdentityServer中,您可以为web应用程序创建一个客户端条目,为移动应用程序创建一个客户端条目

services.AddAuthentication()
        .AddGoogle("Google", o =>
        {
            o.SignInScheme = IdentityServer4.IdentityServerConstants.ExternalCookieAuthenticationScheme;
            o.ClientId = "11111.apps.googleusercontent.com";
            o.ClientSecret = "1231231";
        });

请参阅文档中的客户机类型。

此处显示客户机凭据:

        o.ClientId = "11111.apps.googleusercontent.com";
        o.ClientSecret = "1231231";
仅在IdentityServer和Google之间,不应存储在移动客户端中

移动应用程序中使用的clientid+密码可在IdentityServer中移动应用程序的客户端定义中找到

在本例中,谷歌并不关心用户是否使用web应用程序或客户端应用程序进行身份验证。谷歌只会看到用户通过IdentityServer尝试登录。所以谷歌完全不知道什么样的应用程序在使用IdentityServer

因此,在IdentityServer中,您可以为web应用程序创建一个客户端条目,为移动应用程序创建一个客户端条目

services.AddAuthentication()
        .AddGoogle("Google", o =>
        {
            o.SignInScheme = IdentityServer4.IdentityServerConstants.ExternalCookieAuthenticationScheme;
            o.ClientId = "11111.apps.googleusercontent.com";
            o.ClientSecret = "1231231";
        });

请参阅文档中的客户端类型。

在本例中,您试图通过google作为外部身份提供者从IdentityServer登录。从google的角度来看,客户端是IdentityServer。IdentityServer是一个web应用程序。 您应该坚持使用在google上创建的原始客户端


供将来参考:当我们尝试直接从移动应用程序登录时,我们需要将应用程序类型设置为android或IOS。

在这种情况下,您尝试通过google作为外部身份提供商从IdentityServer登录。从google的角度来看,客户端是IdentityServer。IdentityServer是一个web应用程序。 您应该坚持使用在google上创建的原始客户端


供将来参考:当我们试图直接从移动应用程序登录时,我们需要将应用程序类型设置为android或IOS。

我理解这一部分。但当我在谷歌控制台中创建一个类型为“Android”的OAuth ID时,它并没有透露任何秘密。那么现在我应该在.AddGoogle中的IdentityServer中添加什么呢?我无法跳过ClientSecret属性,它将抛出一个错误,指出ClientSecret是必需的。请参阅我的更新答案。你在google中只创建了一个客户端条目,那就是你的IdentityServer。我理解。但当我尝试从Google控制台获取新的OAuth ID时,我有以下选项:。如果我选择“Android”(如果我选择“Web”,它会给我两个ID+密码),它不会给我ClientSecret,但IS4要求我把它放进去。除非你的意思是,在这种情况下,谷歌OAuth的客户端是IS4(而不是我的移动应用程序),这里的“Web”是正确的选项?在谷歌,你使用Web作为客户端。。。。。我想它不会给你任何客户的秘密,因为机器人无论如何都有保守秘密的问题。它是一个公共客户。因此,将该选项与identityserver的客户端机密一起使用。我理解这一部分。但当我在谷歌控制台中创建一个类型为“Android”的OAuth ID时,它并没有透露任何秘密。那么现在我应该在.AddGoogle中的IdentityServer中添加什么呢?我无法跳过ClientSecret属性,它将抛出一个错误,指出ClientSecret是必需的。请参阅我的更新答案。你在google中只创建了一个客户端条目,那就是你的IdentityServer。我理解。但当我尝试从Google控制台获取新的OAuth ID时,我有以下选项:。如果我选择“Android”(如果我选择“Web”,它会给我两个ID+密码),它不会给我ClientSecret,但IS4要求我把它放进去。除非你的意思是,在这种情况下,谷歌OAuth的客户端是IS4(而不是我的移动应用程序),这里的“Web”是正确的选项?在谷歌,你使用Web作为客户端。。。。。我想它不会给你任何客户的秘密,因为机器人无论如何都有保守秘密的问题。它是一个公共客户。因此,将该选项与identityserver的客户端机密一起使用。