mirror of
https://github.com/go-vikunja/vikunja.git
synced 2026-05-07 03:58:09 -05:00
[GH-ISSUE #388] Login Failure Due to Incorrect Base64 Decoding of Japanese Characters in JWT #6133
Closed
opened 2026-04-20 16:43:40 -05:00 by GiteaMirror
·
12 comments
No Branch/Tag Specified
main
feat-v2-foundation
spike-huma-openapi3
claude/investigate-swagger3-support-nyyUa
feat-list-view-buckets
ci-mysql-8-test
codex/analyze-codebase-for-email-task-feature
feat-project-templates
csv-import-feature
claude/email-reply-comments-wpdcQ
fix-oidc-pkce-support
fix/overview-subtasks-expand
feat/bucket-select-task-detail
feat-soft-delete-projects
claude/review-bot-design-plan-cf5C3
claude/project-scoped-api-tokens-KTqR3
claude/explore-openclaw-integration-KQEzg
claude/project-scoped-api-tokens-yv5KS
fix-duplicate-close-button
feat-list-view-sorting
feat/official-vite-sentry-plugin
feat/highlight-overdue-tasks
feat/add-enter-key-form-submission-handling
feat/TipTap-nits
feat/update-caldavtimetotimestamp-parsing
feat-phosphor-icons
wip-plans
claude/investigate-issue-2173-llKme
fix-description-text-drag
feat-custom-keyboard-shortcuts
pr-1845-ci
codex/fix-drag-and-drop-behavior-inconsistency
copilot/add-clickable-labels-for-filtering
copilot/fix-issue-1786
playwright-migration
fix-kanban-repeating-wip
copilot/fix-1498
feature/replace-axios
codex/upgrade-to-tailwind-4.1.8-using-pnpm
codex/add-cypress-test-for-avatar-types
feature/biome
feature/oxc
codex/update-flexsearch-to-0.8.205
4r6ni9-codex/fix-deprecated-sass-@import-usage
codex/fix-deprecated-sass-@import-usage
codex/add-cypress-test-for-task-list-refresh-fix
codex/fix-quick-add-magic-not-adding-tasks
codex/fix-all-type-errors
codex/fix-mimetype-for-docs.json
feature/caldav-from-scratch
feature/gh-actions-hetzner
fix-ci
feat/new-logger
jyte-better-dev-config
feat/add-team-member-with-enter
fix/button-and-icon-types
fix/notifications-component-name-collision
feature/null-time
renovate/tailwindcss-4.x
feature/unplugin-vue-router
fix/deprecated-import
feature/zod-schema
renovate/golangci-golangci-lint-1.x
fix/tiptap-editor-reactive-destructuring
release/0.24
feat/improve-add-task
fix/saved-filter-search
feat/webp-and-avif-attachment-previews
feature/migrate-back-to-bulma
fix/sass-add-missing-list-import
feature/sticky-demo-bar
fix/gantt-view-switch
feature/typesense-position-join
feature/focus-visible
dependencies/golangci-lint
feature/better-filter-syntax
fix/tiptap-task-list
renovate/github.com-golang-jwt-jwt-v4-5.x
feature/hide-forbidden-related-tasks
renovate/golang-1.x
release/0.20
release/0.17
release/0.16
release/0.15
release/0.14
v2.3.0
v2.2.2
v2.2.1
v2.2.0
v2.1.0
v2.0.0
v1.1.0
v1.0.0
v1.0.0-rc4
v1.0.0-rc3
v1.0.0-rc2
v1.0.0-rc1
v1.0.0-rc0
v0.24.6
v0.24.5
v0.24.4
v0.24.3
v0.24.2
v0.24.1
v0.24.0
v0.23.0
v0.22.1
v0.22.0
0.21.0
v0.21.0
v0.20.4
v0.20.5
v0.20.3
v0.20.2
v0.20.1
v0.20.0
v0.19.2
v0.19.1
v0.19.0
vue3
v0.18.1
v0.18.0
v0.17.1
v0.17.0
v0.16.1
v0.16.0
v0.15.1
v0.15.0
v0.14.1
v0.14.0
v0.13.1
v0.13
v0.12
v0.11
v0.10
v0.9
v0.8
v0.7
v0.6
v0.5
v0.4
v0.3
v0.2
v0.1
Labels
Clear labels
area/api
area/attachments
area/auth
area/avatars
area/backup-restore
area/caldav
area/calendar-view
area/comments
area/config
area/database
area/desktop
area/docker
area/email
area/favorites
area/filters
area/frontend
area/gantt
area/i18n
area/import-export
area/internal-code
area/kanban
area/labels
area/list-view
area/mobile
area/notifications
area/permissions
area/projects
area/pwa
area/recurring-tasks
area/reminders
area/search
area/shortcuts
area/subtasks
area/sync
area/table-view
area/task-editor
area/task-metadata
area/task-relations
area/teams
area/theming
area/time-tracking
area/typesense
area/views
area/webhooks
bug
changes requested
concern/accessibility
concern/performance
concern/regression
concern/ux
confirmed
db/mysql
dependencies
enhancement
good first issue
help wanted
integration/inbound
integration/outbound
kind/bug
kind/feature
needs reproduction
pull-request
question
security
support
upstream issue
waiting for reply
wontfix
Mirrored from GitHub Pull Request
No Label
needs reproduction
Milestone
No items
No Milestone
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/vikunja#6133
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @miikun77 on GitHub (Jan 8, 2025).
Original GitHub issue: https://github.com/go-vikunja/vikunja/issues/388
Description
The current implementation of base64 decoding in the frontend application leads to incorrect handling of non-ASCII characters, specifically Japanese characters. This leads to a complete login failure when processing user information extracted from JWT tokens received during the OpenID Connect login flow.
Current behavior
The code responsible for decoding the base64-encoded payload of the JWT token (obtained via OpenID Connect) incorrectly replaces only the first instance of - with + and _ with /. Additionally, it fails to properly decode non-ASCII characters.
Steps to reproduce
Additional context
The current code for base64 decoding in
frontend/src/stores/auth.tsis:This code only replaces the first instance of - and _. A correct implementation should use regular expressions with the g (global) flag to replace all occurrences.
Reference
This issue is similar to a problem reported in the microsoft-authentication-library-for-js repository: https://github.com/AzureAD/microsoft-authentication-library-for-js/issues/985
Note
I am including the code directly in this report because my Gitea account is not yet approved. I apologize for any inconvenience this may cause.
Vikunja Version
v0.24.6
Browser and version
Chrome/131.0.6778.206
Can you reproduce the bug on the Vikunja demo site?
No
Screenshots
No response
@kolaente commented on GitHub (Jan 10, 2025):
Is that reproducible on the demo when you set the accounts' name to contain non-ascii characters and then log in again?
@kolaente commented on GitHub (Jan 21, 2025):
I'm unable to reproduce this with a local account on the demo with a display name set to Japanese or an openid account with a Japanese name.
Can you add more details about how to reproduce this?
@kolaente commented on GitHub (Jan 21, 2025):
From your analysis, it seems like this is not specific to Japanese characters in the token?
@miikun77 commented on GitHub (Feb 3, 2025):
Sorry for the delayed reply.
Thank you for your feedback. I tested by setting the account name to “日本語憂鬱髙” and confirmed that the issue occurs when decoding the Base64 payload containing Japanese characters in the JWT token.
@kolaente commented on GitHub (Feb 3, 2025):
Did you reproduce it on the demo?
@miikun77 commented on GitHub (Feb 6, 2025):
On the demo, I can't use OpenID Connect, so I can't reproduce the issue.
@kolaente commented on GitHub (Feb 6, 2025):
But can you reproduce it on the demo if you change the name in the settings?
@miikun77 commented on GitHub (Feb 6, 2025):
It seems like the issue is related to OpenID Connect, not just the name change in the settings. The problem appears to be in transferring OpenID token-related data.
@kolaente commented on GitHub (Feb 7, 2025):
I've created a test account with the name
日本語憂鬱髙in my authentik instance and was able to log in through that without issues.If you're seeing the problem in the frontend, it might be unrelated to openid auth since the openid auth token is parsed on the server only.
@miikun77 commented on GitHub (Mar 28, 2025):
Sorry for the delay. After a deeper investigation, I found that the issue is not related to OpenID Connect itself. Instead, it was caused by certain characters in the user database.
Specifically, when the username field contains some non-ASCII characters (such as certain Japanese characters), it triggers an error during login.
Here is an example of the data that caused the issue:
@kolaente commented on GitHub (Mar 28, 2025):
Which database are you using?
@miikun77 commented on GitHub (Apr 7, 2025):
Upon further analysis, it became clear that this issue is not related to the database but rather to the frontend JWT base64 decoding implementation, which does not comply with RFC 4648 (and RFC 7519).
https://datatracker.ietf.org/doc/html/rfc4648#section-4
Specifically, when handling Base64 URL-encoded JWT payloads (as described in RFC 4648 Section 5), the following two corrections are necessary:
Please verify and confirm this solution at your convenience.