标签: openid-connect

如何使用 keycloak 保护角度/弹簧应用程序?

我有一个 Spring Boot(后端)和 Angular(前端)应用程序,我想用 keycloak 来保护它(用于身份验证)。

我有一个非常基本的部署,其中由 spring 创建的可执行 jar 也为客户端代码(来自 Angular)提供服务。

我看过几个前后端分离的教程,前端使用代码流+pkce将其身份验证委托给keycloak,而后端是无状态的,并检查是否存在由keycloak实例认证的jwt令牌。

然而,由于我有一个后端服务器,我想避免使用公共客户端,而是依赖服务器端的反向通道令牌交换。所以前端不应该对keycloak实例有任何了解。

这可能吗/这是最佳实践吗?有没有一个前端库可以帮助我实现这一目标?我遇到过 keycloak-angular 库,但它似乎针对第一种情况,其中 SPA 直接连接到 Keycloak,而不是使用后端服务器。

java spring openid-connect keycloak angular

3
推荐指数
1
解决办法
1636
查看次数

openiddict 令牌的默认生命周期值是多少

非常简单的问题,我只想知道 openiddict 3.0+ 中设置的默认值是什么

代币是

  • 访问令牌
  • 授权令牌
  • 设备代码令牌
  • 身份令牌
  • 刷新令牌
  • 用户代码令牌

提前致谢。

.net c# openid openid-connect openiddict

3
推荐指数
1
解决办法
2546
查看次数

OpenIddict,重新启动身份验证服务器后令牌将失效

我进行了以下设置:授权服务器(带有 MVC 的 .NET 6,端口 7000)、客户端(带有 MVC 的 .NET 6,端口 7001)、资源服务器(.NET 6 API,端口 7002)。

授权服务器设置:

builder.Services.AddAuthentication()
   .AddGoogle(options =>
   {
       options.ClientId = builder.Configuration["ClientId"];
       options.ClientSecret = builder.Configuration["ClientSecret"];
   });

builder.Services.Configure<IdentityOptions>(options =>
{
    options.ClaimsIdentity.UserNameClaimType = Claims.Name;
    options.ClaimsIdentity.UserIdClaimType = Claims.Subject;
    options.ClaimsIdentity.RoleClaimType = Claims.Role;
    options.ClaimsIdentity.EmailClaimType = Claims.Email;

    options.SignIn.RequireConfirmedAccount = false;
});

builder.Services.AddOpenIddict()
    .AddCore(options =>
    {
        options.UseEntityFrameworkCore()
                .UseDbContext<AuthorizationContext>();
    })
    .AddServer(options =>
    {
        options.SetAuthorizationEndpointUris("/connect/authorize")
                .SetLogoutEndpointUris("/connect/logout")
                .SetTokenEndpointUris("/connect/token")
                .SetUserinfoEndpointUris("/connect/userinfo")
                .SetIntrospectionEndpointUris("/connect/introspect");

        options.RegisterScopes(Scopes.Email, Scopes.Profile, Scopes.Roles);

        options.AllowAuthorizationCodeFlow();

        options.AddDevelopmentEncryptionCertificate()
                .AddDevelopmentSigningCertificate();

        options.UseAspNetCore()
                .EnableAuthorizationEndpointPassthrough()
                .EnableLogoutEndpointPassthrough()
                .EnableTokenEndpointPassthrough()
                .EnableUserinfoEndpointPassthrough()
                .EnableStatusCodePagesIntegration();
    })
    .AddValidation(options =>
    {
        options.UseLocalServer();

        options.UseAspNetCore();
    });

builder.Services.AddHostedService<Worker>(); …
Run Code Online (Sandbox Code Playgroud)

oauth jwt openid-connect openiddict

3
推荐指数
1
解决办法
1092
查看次数

在 keycloak 令牌中使用“sub”声明作为内部数据库中的用户 ID 是否安全

我正在开发一个将来可能支持社交登录的应用程序(除了我们自己的 keycloak 用户名/电子邮件注册之外)。

我正在尝试确定使用 keycloak ID 令牌中的“sub”声明作为我们内部 mongo 数据库中用户的主键(“_id”字段)是否安全。理想情况下,我希望使用令牌中的 id,因为在某些情况下,我可能不需要在 api 中进行额外的用户查找。

我看到 Microsoft azure 文档显示他们的身份验证令牌同时具有“sub”和“oid”,其中“oid”建议用于内部用户查找,因为它是全局唯一的。请参阅本节

此 ID 唯一标识跨应用程序的用户 - 登录同一用户的两个不同应用程序将在 oid 声明中收到相同的值。Microsoft Graph 将返回此 ID 作为给定用户帐户的 id 属性。

那么,keycloak 中是否存在与“oid”声明等效的内容,我是否需要添加自定义声明来实现等效项,或者我可以只使用“sub”声明来代替?

authentication oauth-2.0 jwt openid-connect keycloak

3
推荐指数
1
解决办法
3154
查看次数

如何在移动应用程序和Webview之间共享身份验证?

我想知道并试图找到一种解决方案,在没有任何用户交互的情况下使用相同的身份验证会话或相同的用户在移动应用程序中打开 webview。

现在我已经使用 Oauth 实现了移动设备登录,但如果我不知道如何使用正确的解决方案来实现上述方法。

我有一些解决方案,但不确定这是最佳实践并且有利于安全。

  1. 我将使用与应用程序中的按钮不同的移动应用程序的新客户端生成授权 URL,但在这种情况下,如果用户不知道,则有机会允许用户使用不同的帐户登录。它会导致移动视图和网络视图之间不匹配。

  2. 如果 webview 的强制登录有效,我将传递 id_token 并让 webview 使用公钥验证 id_token。

仅供参考,我也实现了 OIDC,但肯定不是我可以用它来支持这种情况。

oauth-2.0 openid-connect

3
推荐指数
1
解决办法
3127
查看次数

Azure AD应用程序角色

我正在尝试通过Azure AD应用程序角色创建受保护的控制器.

这是对Startup.Auth的免除,它基本上由Visual Studio模板提供:

public void ConfigureAuth(IAppBuilder app)
        {
            ApplicationDbContext db = new ApplicationDbContext();

            app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

            app.UseCookieAuthentication(new CookieAuthenticationOptions());

            app.UseOpenIdConnectAuthentication(
                new OpenIdConnectAuthenticationOptions
                {
                    ClientId = clientId,
                    Authority = Authority,
                    PostLogoutRedirectUri = postLogoutRedirectUri,

                    Notifications = new OpenIdConnectAuthenticationNotifications()
                    {
                        // If there is a code in the OpenID Connect response, redeem it for an access token and refresh token, and store those away.
                       AuthorizationCodeReceived = (context) => 
                       {
                           var code = context.Code;
                           ClientCredential credential = new ClientCredential(clientId, appKey);
                           string signedInUserID = context.AuthenticationTicket.Identity.FindFirst(ClaimTypes.NameIdentifier).Value;
                           AuthenticationContext authContext …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-web-api azure-active-directory asp.net-web-api2 openid-connect

2
推荐指数
1
解决办法
2510
查看次数

auth0和IdentityServer有什么区别?

似乎这两个都提供了授权和身份验证。

两者都使用OpenID connect。

identity oauth-2.0 openid-connect auth0 identityserver3

2
推荐指数
1
解决办法
797
查看次数

Auth0 JWT访问令牌

我很难获得Auth0以JWT格式返回访问令牌。我需要JWT格式的文件,以便可以使用Java JWT库进行验证。

我正在使用Auth0 lock登录,并用于/oauth/token获取访问令牌-我尝试将受众设置为我们的API标识符(包括锁定auth参数和/oauth/token有效负载在内的多个位置),但未成功-返回访问令牌,但未返回JWT。

或者,是否有一个Java库用于验证“本机” Auth0访问令牌?

var options = {
    auth: {
        redirectUrl: '<redirect_link>',
        responseType: 'code',
        params: {
            audience: '<API_identifier>',
            scope: 'openid offline_access'
        }
    },
    allowedConnections: ['Username-Password-Authentication']
};

var lock = new Auth0Lock('<clientId>', '<auth0_Host>', options); 
lock.show();
Run Code Online (Sandbox Code Playgroud)

返回的代码用于POST https://<host>/oauth/token与数据:

client_id=<client_id>&redirect_uri=<redirect_url>&client_secret=<client_secret>&code=<returned_code>&grant_type=authorization_code&audience=<API_identifier>
Run Code Online (Sandbox Code Playgroud)

哪个成功,但是访问令牌不是JWT,例如: "access_token":"sG99DAJI789SYgTj"

使用范围openid返回JWT格式的id_token,但是从阅读文档开始,不应将此令牌用于API授权。

token oauth-2.0 jwt openid-connect auth0

2
推荐指数
1
解决办法
726
查看次数

Azure AD答复URL:使用OpenID Connect Auth时如何添加几个URL

I'm trying to build a ASP.NET MVC app which doesn't allow access to anonymous user (with the exception of a custom URL that is to be shown to authenticated users which aren't allowed to use the app).

Now, I've register my app in the azure portal (portal.azure.com) and I'd like to use several URLs. I've added two entries:

  1. https://localhost/test
  2. https://www.test.com

I'm using the following code to configure authentication at startup:

public void ConfigureAuth(IAppBuilder app) {
    app.SetDefaultSignInAsAuthenticationType(
          CookieAuthenticationDefaults.AuthenticationType);
    app.UseCookieAuthentication(new CookieAuthenticationOptions());
    app.UseOpenIdConnectAuthentication( …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc azure-active-directory openid-connect

2
推荐指数
2
解决办法
3931
查看次数

在Superset中使用OpenID/Keycloak

我想在Superset环境中使用keycloak对我的用户进行身份验证.

Superset使用flask-openid,如在flask-security中实现的:

要启用与常规用户身份验证(数据库)不同的用户身份验证,您需要覆盖superset_config.py文件中的AUTH_TYPE参数.您还需要提供对openid-connect领域的引用并启用用户注册.据我了解,它应该看起来像这样:

from flask_appbuilder.security.manager import AUTH_OID
AUTH_TYPE = AUTH_OID
OPENID_PROVIDERS = [
    { 'name':'keycloak', 'url':'http://localhost:8080/auth/realms/superset' }
]
AUTH_USER_REGISTRATION = True
AUTH_USER_REGISTRATION_ROLE = 'Gamma'
Run Code Online (Sandbox Code Playgroud)

使用此配置,登录页面将更改为用户可以选择所需OpenID提供程序的提示(在我们的示例中为keycloak).我们还有两个按钮,一个用于登录(对于现有用户),另一个用于注册为新用户.

我希望这些按钮中的任何一个都能带我到我的keycloak登录页面.但是,这不会发生.相反,我被重定向回到登录页面.

在我按下注册按钮的情况下,我收到一条消息"此刻无法注册您,请稍后再试".当我按下登录按钮时,不会显示任何消息.Superset日志显示加载登录页面的请求,但没有对keycloak的请求.我使用Google OpenID提供程序尝试了相同的操作,该工作正常.

由于我没有看到对keycloak的请求,这让我觉得我要么在某处丢失配置设置,要么我使用了错误的设置.你能帮我弄清楚我应该使用哪些设置吗?

python flask-security openid-connect keycloak apache-superset

2
推荐指数
1
解决办法
3189
查看次数