标签: google-openidconnect

使用 openid-connect 进行身份验证 spa 和 rest api

我有一个 API 服务器(资源服务器)和多个应用程序、Web GUI (SPA) 和一个桌面客户端,也许还有更多。除了我的 API 服务器的 http 基本身份验证之外,我还想使用 openid-connect。使用哪个 openid 提供程序应该是可配置的。我自己的,facebook,google……我只想做身份验证,我不需要他们的 API。我只需要一些个人资料数据,例如电子邮件或名字。

假设我已将 google 配置为我的 IdP,并且我目前正在使用我的 Web GUI (SPA)。我需要登录,没问题,根据https://developers.google.com/identity/protocols/OpenIDConnect我将用户重定向到谷歌,获取我的授权码,Web Gui (SPA) 从谷歌获取 id_token 和 access_token .

到目前为止没问题,但现在 SPA 必须与我的 API 服务器一起工作,并且 API 服务器需要验证来自客户端 (WebGui SPA) 的每个请求(因为它是一个无状态的休息 api)并且需要知道哪个用户实际上做了这个。

一种

那么来自 google 的 access_token 是用来访问 google api 的吗?但我也可以将这个 access_token 与每个请求一起传递给我的 api 服务器,api 服务器调用https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=xxx来验证 access_token 并获取帐户名(邮件)。但这听起来不对,是吗?

我也有 id_token 可以验证,而无需每次都调用谷歌服务器。那么我是否也可以将 id_token 作为承载传递给我的 api 服务器,而 api 服务器可以验证 id_token?但是根据 openid-connect 规范, access_token 实际上是刚刚传递给 api 服务器的那个,而 id_token 必须保留在客户端上。但是 id_token 对我来说完全没用,API …

api oauth-2.0 single-page-application openid-connect google-openidconnect

7
推荐指数
1
解决办法
1409
查看次数

为什么"提示:'无'"在Google SignIn中运行良好?

我写了一些代码来使用Google SignIn构建Web应用程序.
首先,初始化API平台,

gAuth = gapi.auth2.init( {
    client_id: gAuthClientId,
    fetch_basic_profile: false,
    scope: gAuthScope
} );
Run Code Online (Sandbox Code Playgroud)

并让用户登录.

gAuth.signIn({
    prompt: 'none'
});
Run Code Online (Sandbox Code Playgroud)

在这段代码中,我想跳过(已经)登录用户的auth弹出窗口,并按照开发人员文档中的引用进行操作:

prompt:指定是否提示用户重新进行身份验证.请参阅OpenID连接请求参数.可选的.

以及上述文件中显示的参数文件.

提示
可选.以空格分隔的区分大小写的ASCII字符串值列表,指定授权服务器是否提示最终用户进行重新认证和同意.定义的值为:
none
授权服务器不得显示任何身份验证或同意用户界面页面.如果最终用户尚未经过身份验证,或者客户端没有对所请求的声明进行预先配置的同意,或者不满足处理请求的其他条件,则会返回错误.错误代码通常是login_required,interaction_required.这可以用作检查现有身份验证和/或同意的方法.

但它效果不好.实际上,对于已登录的用户,API会显示一次空弹出窗口,并立即关闭它.当我自动执行此阶段时,它被阻止浏览器.

为什么会这样?我应该做些什么来避免签名用户弹出窗口?

google-signin google-openidconnect

6
推荐指数
0
解决办法
397
查看次数

UseOpenIdConnectAuthentication - 无法取消保护消息。状态错误消息

我正在尝试在我的应用程序中添加 Google 和 Azure Active Directory 权限作为 OpenIdConnect 选项。

如果我分别添加它们中的每一个,它就可以正常工作。但是,如果我将它们都添加,则会收到以下错误消息:

无法取消对消息的保护。状态

这些是 OpenIdConnectOptions 配置:

        //Google
        appBuilder.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
        {                 
            ClientId = ".....apps.googleusercontent.com",
            Authority = $"https://accounts.google.com",
            ClientSecret = "xxxyyyzzzz",
            AuthenticationScheme = "Google",
            DisplayName = "Google",
            AutomaticChallenge = true                                       
        });

        //Azure AD Providers
        var schemeName = "Azure Active Directory";
        var clientId = "1234567890";  
        var tenantId = "0987654321";  

        appBuilder.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
        {               
            ClientId = clientId,
            ClientSecret = "aaaaabbbbcccc",
            Authority = $"https://login.microsoftonline.com/{tenantId}",
            AuthenticationScheme = "Azure Active Directory",
            DisplayName = "Azure Active Directory",
            AutomaticChallenge = true,                                                
        });
Run Code Online (Sandbox Code Playgroud)

azure openid-connect .net-core identityserver4 google-openidconnect

4
推荐指数
1
解决办法
2430
查看次数