Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

通用 OAuth 登陆错误 #44

Closed
hhhguany opened this issue Apr 26, 2024 · 7 comments · Fixed by #57
Closed

通用 OAuth 登陆错误 #44

hhhguany opened this issue Apr 26, 2024 · 7 comments · Fixed by #57

Comments

@hhhguany
Copy link

hhhguany commented Apr 26, 2024

根据 #23 的描述进行了通用 OAuth Provider 配置,但是初次绑定时,认证完成,会被重定向到 /console/login?error(但是没有输出错误信息),且没有绑定成功。

错误状况与这个问题一样:halo-dev/halo#3670

我尝试了以下方式进行调试:

  • 配置 GitHub 认证,能够成功绑定。(说明插件本身功能没问题)
  • 使用 GitHub 的配置,新建一个 OAuth Provider,能够成功绑定。(说明 OAuth Provider 配置方法没问题)

由于每个 OAuth 服务器都存在一些细微差异(比如支持用户 claim 不一样),现在我怀疑的问题出现在两个地方:

  • 是否成功交换了 access token
  • 是否成功获取并解析出了用户信息(userNameAttributeName

我目前从 概览 - 运行日志 中没有看到任何错误提示,想请问下开发者,可以从哪里获取本插件的错误信息?

@ZhangYuci
Copy link

+1 我也发生了这样的问题,查看日志没有错误信息😭

@hhhguany
Copy link
Author

hhhguany commented Apr 29, 2024

更新下目前的进度。

通过添加 issuerUrijwkSetUri 参数,应该是成功跑通了流程。(具体还没搞清楚)

但是目前出现了 400 报错 #14,错误信息如下:

Validation error(s) : spec: Field 'displayName' is required. (code: 1026) From: spec.<#/components/schemas/UserConnectionSpec>. of schema auth.halo.run/v1alpha1/UserConnection.

目前定位原因是我的 IdP 不支持返回 name 这个属性。想请问下开发者,应该如何配置,以使用其他的 IdP 返回属性(比如 username),映射到 displayName 参数上。

@ruibaby
Copy link
Member

ruibaby commented Apr 29, 2024

更新下目前的进度。

通过添加 issuerUrijwkSetUri 参数,应该是成功跑通了流程。(具体还没搞清楚)

但是目前出现了 400 报错 #14,错误信息如下:

Validation error(s) : spec: Field 'displayName' is required. (code: 1026) From: spec.<#/components/schemas/UserConnectionSpec>. of schema auth.halo.run/v1alpha1/UserConnection.

目前定位原因是我的 IdP 不支持返回 name 这个属性。想请问下开发者,应该如何配置,以使用其他的 IdP 返回属性(比如 username),映射到 displayName 参数上。

cc @liuchangfitcloud

@hhhguany
Copy link
Author

hhhguany commented Apr 29, 2024

已经定位到相关代码:

.displayName(oauth2User.getAttribute("name"))

通过修改 GenericUserProfileMapper.java 文件,已经可以成功设置 displayName

import java.util.Optional;

public Oauth2UserProfile mapProfile(OAuth2User oauth2User) {
    String displayName = (String) Optional.ofNullable(oauth2User.getAttribute("username"))
    .orElse(oauth2User.getAttribute("name"));
    return Oauth2UserProfile.builder()
        .displayName(displayName)
        .username(oauth2User.getAttribute("login"))
        .avatarUrl(oauth2User.getAttribute("avatar_url"))
        .profileUrl(oauth2User.getAttribute("html_url"))
        .build();
}

建议开发者之后,可以在 Oauth2ClientRegistration 配置文件中,添加一个新的参数,支持自定义将 OAuth 协议中用户属性映射成 displayName 参数(类似 userNameAttributeName 映射 username)。

另外也建议开发者可以提供下错误日志记录功能,我想排查不添加 issuerUrijwkSetUri 参数报错的原因。谢谢!

@dailyDone
Copy link

dailyDone commented Jun 25, 2024

+1 我也发生了这样的问题,没有异常日志
第三方的auth code生成返回了, 回调地址没响应

再次更新:
通过抓包工具分析,获取code, 通过code获取access_token, 再通过token获取user已经完成,不过界面还是会被重定向到 /console/login?error,不解

@atangccc
Copy link

+1 我也发生了这样的问题,没有异常日志 第三方的auth code生成返回了, 回调地址没响应

再次更新: 通过抓包工具分析,获取code, 通过code获取access_token, 再通过token获取user已经完成,不过界面还是会被重定向到 /console/login?error,不解

问题任然存在

@guqing
Copy link
Member

guqing commented Aug 2, 2024

see #57

@guqing guqing closed this as completed Aug 2, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants