FusionAuth
    • Home
    • Categories
    • Recent
    • Popular
    • Pricing
    • Contact us
    • Docs
    • Login
    1. Home
    2. dan
    3. Posts
    • Profile
    • Following 0
    • Followers 9
    • Topics 661
    • Posts 2,671
    • Best 195
    • Controversial 0
    • Groups 4

    Posts made by dan

    • RE: Getting custom information from the hosted login pages into the JWT

      This is not available today without some glue code.

      Currently our suggestion is to use Javascript on the Login page to jam the claim into a meta field that is shown on a Webhook payload, like jamming stuff into event.info.deviceDescription .

      Then you create user.login.success webhook, making sure it is transactional. On login, the event is fired that off to your system and then you extract the claim off the event.info.deviceDescription field and make a PATCH call to FusionAuth. In that PATCH call, you add this to a field on user.data.x.

      Then once that PATCH is successful, the 200 response back to the user.login.success event which completes the login and triggers the JWT populate lambda. That lambda extracts the claim off the user.data.x field and puts it into the JWT.

      It's not pretty but it is the only way to have this work for now. (For self-service registration you can use a custom hidden field, much easier.)

      Relevant docs:

      • https://fusionauth.io/docs/extend/code/lambdas/jwt-populate
      • https://fusionauth.io/docs/extend/events-and-webhooks/events/user-login-success
      • https://fusionauth.io/docs/apis/users#update-a-user
      posted in Q&A
      danD
      dan
    • Getting custom information from the hosted login pages into the JWT

      How can I add in custom claims in to the JWT based on a custom login field or other parameters on the login form?

      I have a parameter/variable that can change between each login (like a device id) and want it to be in the access token.

      posted in Q&A jwt custom claims login
      danD
      dan
    • RE: allow users to register for any application but not create user accounts

      This is possible in a couple of ways.

      First, to allow users to register for an application on login, you need to turn on self-service registration. From the docs:

      When you enable self-service registration for an application and a user who does not have a registration for that application successfully logs in to that application, the user will automatically be registered for that application, and have a registration added.

      Then the question becomes, how can you disable the hosted login pages self-service registration form?

      To do so, take the following steps:

      • update your theme to remove the link to the "Don't have an account? Create one" link from any pages, including the login page. You can also remove all the content from the registration themed page and replace it with not implemented or similar. However, a sinister user may still be able to post to the register endpoint and create a user
      • if you are self-hosting, block access to the /register endpoint using a proxy
      • if you are not self-hosting, prevent self-service registration by adding an encrypted secret value to all user accounts you create via the API. Then, create self-service registration validation lambda which will examine the user object. If the user object comes through without the secret value, fail the registration. Otherwise allow it through because it is a user who has logged in.

      The self-service lambda may not fire unless there are required fields on the registration form, but that behavior is undocumented and may change.

      posted in Q&A
      danD
      dan
    • allow users to register for any application but not create user accounts

      I want to allow users to freely be registered to any number of applications simply by logging in, but not be able to use the self-service registration form to create user accounts (so I don't want them to be able to use the self-service registration form provided by the hosted login pages).

      I'll create all user accounts using the User API.

      Is there any way to do this?

      inspired by this github issue

      posted in Q&A registration application login
      danD
      dan
    • Docs now fully downloadable in LLM friendly format

      If you go look at https://fusionauth.io/docs/ and scroll to the bottom, you'll see a new section called 'Download docs'.

      Screenshot 2025-05-19 at 9.19.23 AM.png

      This takes you to fusionauth.io/docs/llms-full.txt which is all of our documentation (5MB!) in one file so you can upload it to your favorite LLM and query it.

      Hope you all find it useful.

      posted in Announcements llms docs
      danD
      dan
    • RE: Does FusionAuth support mutual TLS?

      By using a proxy or gateway that supports mutual TLS, you can use it with FusionAuth.

      For example, AWS ALB supports Mutual TLS verify where the ALB does client certificate verification. Nginx has similar functionality.

      If you are running FusionAuth 'bare' and terminating TLS directly at the FusionAuth server, mutual TLS is not supported.

      posted in Q&A
      danD
      dan
    • Does FusionAuth support mutual TLS?

      Hiya,

      Does FusionAuth support mutual TLS where the client and server both have certificates?

      (I'm not talking about mTLS token binding; I understand that is not implemented per https://github.com/FusionAuth/fusionauth-issues/issues/1025 .)

      posted in Q&A
      danD
      dan
    • RE: Does FusionAuth support mTLS token binding?

      Hiya,

      There are currently no plans to support the full mTLS spec. We are discussing DPoP (tracking issue) internally.

      However, depending on your needs, there may be a workaround.

      Since the client credentials grant depends on Entities, you can leverage this to inject a client certificate hash into an access token obtained through the client credentials grant.

      How this works at a high level:

      • Client Certificate Registration
        During onboarding, your customer (e.g., a bank) registers their client certificate. A hashed value of that certificate is securely stored in FusionAuth (entity.data). The hashing process is outlined in the RFC.
      • Client Credentials Request
        When the bank requests an access token using the Client Credentials grant, a FusionAuth Lambda is invoked before the JWT is signed.
      • Augment Custom Claims
        The Lambda code looks up the stored certificate hash and injects it as a claim in the JWT. For maximum compatibility with RFC 8705, it is recommended to add this hash to the cnf object in the JWT, like so:
      "cnf":{
        "x5t#S256": "bwcK0esc3ACC3DB2Y5_lESsXE8o9ltc05O89jdN-dg2"
      }
      
      • Accessing the Resource Server or API
        The customer presents both the access token and presents their client certificate when calling your API.
      • Validation Flow
        Your API:
        • verifies the JWT signature
        • computes a hash of the presented client certificate
        • compares it to the x5t#S256 claim in the token
      • Decision Logic
        If the hashes match, the request is bound to the correct client and access is granted to the protected resource.
      posted in Q&A
      danD
      dan
    • Does FusionAuth support mTLS token binding?

      Does FusionAuth support mTLS token binding (RFC 8705, section 3) for the client credentials grant?

      I found this issue but wasn't sure what the current status is: https://github.com/FusionAuth/fusionauth-issues/issues/1025

      posted in Q&A token binding mtls 8705
      danD
      dan
    • RE: How to deal with sign-up spam?

      @theogravity-sb Hmmm. So the issue is that someone is registering with a gmail account they control but it looks like this:

      foo@gmail.com with a name of <Dan https://evil.com> which is being turned into a link?

      Or am I misunderstanding your question?

      posted in Q&A
      danD
      dan
    • RE: How to deal with sign-up spam?

      You have a variety of ways to approach this, with different tradeoffs around functionality, effort and cost. It also matters if the spam accounts are being signed up for by humans or bots.

      • use a webhook to prohibit bogus users from being created by setting the user.create webhook to be transactional. You'd then write a service that could examine the user object, including email address or other attributes, and return a non-200 value to fail their creation. Details on webhooks. This is available on the community plan.

      • use email verification to prevent spam users without an email inbox from using your application. Details on configuring this functionality. This is available on any paid plan.

      • use a self-service registration lambda, and examine the email address and other information for a user. If a user is obviously bogus or matches a pattern, you could return a message stating they can't register, or to call you for assistance. Details on using this lambda. This is available on any paid plan.

      • turn on CAPTCHA which will make it harder for bots to sign up. This requires an enterprise plan.

      posted in Q&A
      danD
      dan
    • How to deal with sign-up spam?

      I have self-service registration turned on. I am getting some valid users, but a bunch of spam accounts.

      What is the best way to deal with this?

      Thanks!

      posted in Q&A
      danD
      dan
    • RE: Unique username and email at the same time

      @kasir-barati Hiya, welcome to FusionAuth. Sorry, just ran across your forum post today.

      There is no way to assign constraints to user.data fields within FusionAuth, but there is an open issue that I encourage you to upvote.

      You can require usernames to be unique in a tenant, using the Unique usernames setting. It is, however a feature which requires a paid plan.

      Another alternative, rather than

      fetching all users and then looping over users
      would be to search for the username before creating the user. Using the search functionality that wouldn't require scanning all the users. You can use a transactional webhook to fail user creation if your uniqueness rules are not met.

      posted in Q&A
      danD
      dan
    • RE: Failure when starting FusionAuth in Docker on Mac M4

      This is due to a bug in the openjdk java library that the docker image uses. You can learn more about the bug here and track our fix (which looks like upgrading the java image our docker file users) by following this bug.

      Until then, the workaround is to pass this java argument at start time:

      -XX:UseSVE=0
      

      This argument disables the use of the SVE extension, which is provides "better data parallelism for HPC and ML".

      You can do that with the FUSIONAUTH_APP_ADDITIONAL_JAVA_ARGS environment variable in your Dockerfile. Here's an example:

        fusionauth:
          # ...
          environment:
            # ...
            FUSIONAUTH_APP_ADDITIONAL_JAVA_ARGS: -XX:UseSVE=0
      
      posted in Q&A
      danD
      dan
    • Failure when starting FusionAuth in Docker on Mac M4

      When running FusionAuth in Docker on an m4 mac, I see this error:

      # A fatal error has been detected by the Java Runtime Environment:
      #
      #  SIGILL (0x4) at pc=0x0000ffff8d33fc5c, pid=1, tid=21
      #
      # JRE version:  (21.0.4+7) (build )
      # Java VM: OpenJDK 64-Bit Server VM (21.0.4+7-LTS, mixed mode, tiered, compressed oops, compressed class ptrs, g1 gc, linux-aarch64)
      # Problematic frame:
      # j  java.lang.System.registerNatives()V+0 java.base
      #
      # No core dump will be written. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
      #
      # The crash happened outside the Java Virtual Machine in native code.
      # See problematic frame for where to report the bug.
      #
      
      ---------------  S U M M A R Y ------------
      
      Command Line: -Dfusionauth.home.directory=/usr/local/fusionauth/fusionauth-app -Dfusionauth.config.directory=/usr/local/fusionauth/config -Dfusionauth.data.directory=/usr/local/fusionauth/data -Dfusionauth.log.directory=/usr/local/fusionauth/logs -Dfusionauth.plugin.directory=/usr/local/fusionauth/plugins -Djava.awt.headless=true -Dcom.sun.org.apache.xml.internal.security.ignoreLineBreaks=true --add-exports=java.base/sun.security.x509=ALL-UNNAMED --add-exports=java.base/sun.security.util=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED -DfusionAuthApp87AFBG16 -Xmx512M -Xms512M io.fusionauth.app.FusionAuthMain
      
      Host: AArch64, 14 cores, 7G, Ubuntu 24.04.1 LTS
      Time: Wed Jan 22 12:35:29 2025 UTC elapsed time: 0.025614 seconds (0d 0h 0m 0s)
      
      ---------------  T H R E A D  ---------------
      
      Current thread (0x0000ffff9802c010):  JavaThread "Unknown thread" [_thread_in_native, id=21, stack(0x0000ffff9e152000,0x0000ffff9e350000) (2040K)]
      
      Stack: [0x0000ffff9e152000,0x0000ffff9e350000],  sp=0x0000ffff9e34e000,  free space=2032k
      Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
      j  java.lang.System.registerNatives()V+0 java.base
      j  java.lang.System.<clinit>()V+0 java.base
      v  ~StubRoutines::call_stub 0x0000ffff8d337144
      V  [libjvm.so+0x8338d8]  JavaCalls::call_helper(JavaValue*, methodHandle const&, JavaCallArguments*, JavaThread*)+0x218
      V  [libjvm.so+0x80f488]  InstanceKlass::call_class_initializer(JavaThread*)+0x284
      V  [libjvm.so+0x8101a8]  InstanceKlass::initialize_impl(JavaThread*)+0x528
      V  [libjvm.so+0xdc7138]  Threads::initialize_java_lang_classes(JavaThread*, JavaThread*)+0xe8
      V  [libjvm.so+0xdc9104]  Threads::create_vm(JavaVMInitArgs*, bool*)+0x3f4
      V  [libjvm.so+0x8c68d4]  JNI_CreateJavaVM+0x80
      C  [libjli.so+0x8bac]  JavaMain+0x7c
      C  [libjli.so+0xc20c]  ThreadJavaMain+0xc
      C  [libc.so.6+0x8597c]
      Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
      j  java.lang.System.registerNatives()V+0 java.base
      j  java.lang.System.<clinit>()V+0 java.base
      v  ~StubRoutines::call_stub 0x0000ffff8d337144
      
      siginfo: si_signo: 4 (SIGILL), si_code: 1 (ILL_ILLOPC), si_addr: 0x0000ffff8d33fc5c
      
      Registers:
      R0=0x0000000000000000
      R1=0x0000000000000000
      R2=0x0000000000000000
      ...
      

      What can I do?

      posted in Q&A mac failure java
      danD
      dan
    • RE: Does FusionAuth have a health check endpoint on the API?

      As of 1.51.1, we now have a dedicated health check API endpoint:

      https://fusionauth.io/docs/apis/system#retrieve-system-health has more details

      posted in Q&A
      danD
      dan
    • RE: Does FusionAuth use Apache Struts - vulnerability scanning issue

      Hiya @maciej-wisniowski !

      We do not use Apache Struts in FusionAuth.

      Hope that helps.

      posted in General Discussion
      danD
      dan
    • RE: Client secret hashed in source identity provider

      No perfect options, but a few workarounds possible

      • a connector-like proxy which would intercept Client Credentials requests from their customers and use business logic to validate the client secret against the stored Duende hash.
      • stand up a simple proxy in front of the Duende that logs the plaintext client secrets for a period of time before migration (protect these logs of course)
      • go to each client and ask them to use a new FusionAuth specific client secret (analogous to resetting user passwords)

      More details on the first option. It requires these steps/prereqs:

      FusionAuth Entities Setup

      • The customer should create new FusionAuth Entities that correlate to the Client ID of all APIs and services currently associated with Duende. For now, let FusionAuth generate a random Client Secret.
      • Custom Attribute for Migration: Store a custom attribute such as migration: false on entity.data for all newly created Entities.

      Migration Steps

      • API/Service Requests Token: The API or service calls Duende's token endpoint.
      • Proxy Interception: The customer's proxy intercepts the client credentials request and searches FusionAuth Entities to find the matching Entity by Client ID.
      • Migration Check: Use an if/else logic to check if migration: false exists for this client ID. If so, the proxy service proceeds with the client credentials request to Duende using the Client ID and Secret (in plain text).
      • JWT Validation: If Duende responds with a JWT, this confirms the Client Secret is correct. The proxy service discards Duende's JWT and then calls the Entity API to update the correct Client Secret and set migration: true on the entity.data object.
      • Complete Migration: The proxy service calls FusionAuth's token endpoint to complete the Client Credentials grant. The proxy service then returns a JWT to the end customer’s API/service, migration is complete.

      Which of these make sense depend on how many clients you have, your dev teams bandwidth, and your security posture.

      posted in Q&A
      danD
      dan
    • Client secret hashed in source identity provider

      We're migrating from an identity provider (Duende) that hashes the client secret when the client credentials grant is used.

      How can we migrate these secrets to FusionAuth entities?

      posted in Q&A entities client creds
      danD
      dan
    • RE: Does FusionAuth work with resend, the email provider?

      While I have not tested it, this documentation shows how to use an SMTP integration to send an email with resend.

      This should work fine with FusionAuth's email settings.

      posted in Q&A
      danD
      dan