<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Authenticating an Archicad user in a 3rd party system in Archicad C++ API</title>
    <link>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704933#M10923</link>
    <description>&lt;P&gt;Bernd's idea of using a proper private/public key combination is much better.&amp;nbsp; &lt;span class="lia-unicode-emoji" title=":smiling_face_with_smiling_eyes:"&gt;😊&lt;/span&gt;&lt;BR /&gt;My idea was the baby version, with a potential security exploit if someone knew how to decompile the apx binary and expose the hash secret.&lt;/P&gt;</description>
    <pubDate>Thu, 11 Jun 2026 02:19:05 GMT</pubDate>
    <dc:creator>scottjm</dc:creator>
    <dc:date>2026-06-11T02:19:05Z</dc:date>
    <item>
      <title>Authenticating an Archicad user in a 3rd party system</title>
      <link>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704032#M10907</link>
      <description>&lt;P&gt;Hello, I know it is possible to get the user id of a user:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://community.graphisoft.com/t5/Developer-Insights/Introducing-new-user-identification-to-the-API-of-Archicad-26/ba-p/588853?utm_source=chatgpt.com" target="_blank" rel="noopener"&gt;https://community.graphisoft.com/t5/Developer-Insights/Introducing-new-user-identification-to-the-API-of-Archicad-26/ba-p/588853?utm_source=chatgpt.com&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But is it possible to verify it?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Let's say I make an Add-on that I sell.&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="cpp"&gt;ACAPI_Protection_GetGSIDUserId &lt;/LI-CODE&gt;
&lt;P&gt;Seems like a good identifier to tie a license of the Add-on to, because it represents an Archicad user.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So to purchase a license for the Add-on the user just has to provide this ID (or if purchase is done in the Add-on it can be retrieved) and stored on a license server.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Then the Add-on can retrieve the same ID and check if it exists on the license server to verify that the user "has" a license to the Add-on.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Problem is that I don't know how to verify this ID on the license server, how can the license server (or other 3rd party systems) know that the id it gets is a valid Graphisoft user ID?&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Is it possible to get a signed graphisoft user id that can be verified. Or a token of some sorts, that a 3rd party system can verify with a graphisoft controlled server?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Paid Add-ons I've seen often requires the user to register separately in their system with traditional email + password. But if you where able to trust the Graphisoft user id (and additionally the organization id) you could make a system where the user can access their 3rd party Add-on licenses through their Graphisoft account.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 03 Jun 2026 08:56:12 GMT</pubDate>
      <guid>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704032#M10907</guid>
      <dc:creator>BenjiDev</dc:creator>
      <dc:date>2026-06-03T08:56:12Z</dc:date>
    </item>
    <item>
      <title>Re: Authenticating an Archicad user in a 3rd party system</title>
      <link>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704047#M10908</link>
      <description>&lt;P&gt;I don't believe there is any way to obtain information about an ID from Graphisoft. But if you support purchasing through an add-ons, presumably you can be confident that the ID it submits to your server is legitimate?&lt;/P&gt;</description>
      <pubDate>Sun, 31 May 2026 20:53:23 GMT</pubDate>
      <guid>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704047#M10908</guid>
      <dc:creator>Ralph Wessel</dc:creator>
      <dc:date>2026-05-31T20:53:23Z</dc:date>
    </item>
    <item>
      <title>Re: Authenticating an Archicad user in a 3rd party system</title>
      <link>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704084#M10909</link>
      <description>&lt;P&gt;Thanks for the answer. Yes I can trust the Add-On but the license server cannot be confident that what it receives was submited from the add-on.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;A technical user could submit (using tools separate from the Add-On) the graphisoft user id of another user to get access to their Add-On licenses. They could also circumvent any 30 day add-on trial by sending random strings as user ids (interpreted as new users on the license server).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The Add-On could sign the user id before sending, but that requires distributing a private key with the Add-On. Would be nice if assurance could come from Graphisoft.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 03 Jun 2026 20:28:28 GMT</pubDate>
      <guid>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704084#M10909</guid>
      <dc:creator>BenjiDev</dc:creator>
      <dc:date>2026-06-03T20:28:28Z</dc:date>
    </item>
    <item>
      <title>Re: Authenticating an Archicad user in a 3rd party system</title>
      <link>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704167#M10911</link>
      <description>&lt;P&gt;Is it possible to request the device name? Basically a second point of identification to make spoofing more of a hassel?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Ling.&lt;/P&gt;</description>
      <pubDate>Tue, 02 Jun 2026 03:20:00 GMT</pubDate>
      <guid>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704167#M10911</guid>
      <dc:creator>Lingwisyer</dc:creator>
      <dc:date>2026-06-02T03:20:00Z</dc:date>
    </item>
    <item>
      <title>Re: Authenticating an Archicad user in a 3rd party system</title>
      <link>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704207#M10912</link>
      <description>&lt;P&gt;Yeah, but a legitimate user could use different devices with the same account. So the server cannot know that an unrecognized device ID for a specific Graphisoft user ID is illegitimate or not.&lt;/P&gt;</description>
      <pubDate>Tue, 02 Jun 2026 12:31:00 GMT</pubDate>
      <guid>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704207#M10912</guid>
      <dc:creator>BenjiDev</dc:creator>
      <dc:date>2026-06-02T12:31:00Z</dc:date>
    </item>
    <item>
      <title>Re: Authenticating an Archicad user in a 3rd party system</title>
      <link>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704239#M10913</link>
      <description>&lt;P&gt;Much like Adobe, you could allow two or three devices with request to the server required for a reset. Unless a person hotdesks, they are probably not working on more than three devices. It would also reduce trial time limit circumvention as the user would need to change their device name as well each time which could cause other inconveniences.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Ling.&lt;/P&gt;</description>
      <pubDate>Wed, 03 Jun 2026 01:23:19 GMT</pubDate>
      <guid>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704239#M10913</guid>
      <dc:creator>Lingwisyer</dc:creator>
      <dc:date>2026-06-03T01:23:19Z</dc:date>
    </item>
    <item>
      <title>Re: Authenticating an Archicad user in a 3rd party system</title>
      <link>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704533#M10918</link>
      <description>&lt;P&gt;What if you also sent a hash of the gsid, generated using a secret seed embed in the addon?&lt;BR /&gt;Once it arrives at your licence server you can rehash the gsid sent a gain using the secret seed and ensure it matches the hash created by the addon.&amp;nbsp;&lt;BR /&gt;Anyone trying to spoof a licence by sending a licence request with tools outside Archicad would be unable to generate a valid hash of their gsid (or anyone else’s) as the don’t have the seed. &lt;BR /&gt;Probably an extra step would be to incorporate a timestamp into the hash seed is worth while, so a users hashed gsid doesn’t stay as a static hash. &amp;nbsp;You’d just need to accomodate for timestamp drift between user and server, but I’m wondering if you could actually send this timestamp with the request safely.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;As for trials. I reckon require a registration for a trial through your website.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 05 Jun 2026 21:07:44 GMT</pubDate>
      <guid>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704533#M10918</guid>
      <dc:creator>scottjm</dc:creator>
      <dc:date>2026-06-05T21:07:44Z</dc:date>
    </item>
    <item>
      <title>Re: Authenticating an Archicad user in a 3rd party system</title>
      <link>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704749#M10920</link>
      <description>&lt;P&gt;Thanks, something like:&lt;/P&gt;
&lt;P&gt;Add-On sends: GSID, timetamp, HASH(GSID + timetamp + embedded secret key)&lt;/P&gt;
&lt;P&gt;Server calculates the same hash with provided GSID, timestamp and internal secret key and checks that the hash provided by the Add-On matches, also checks that the timestamp is within some allowed range.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I think sending the timestamp should be safe then because any change to it would give a different hash and rejected by the server.&lt;/P&gt;</description>
      <pubDate>Tue, 09 Jun 2026 11:54:27 GMT</pubDate>
      <guid>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704749#M10920</guid>
      <dc:creator>BenjiDev</dc:creator>
      <dc:date>2026-06-09T11:54:27Z</dc:date>
    </item>
    <item>
      <title>Re: Authenticating an Archicad user in a 3rd party system</title>
      <link>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704768#M10921</link>
      <description>&lt;P&gt;Hi Scott,&lt;BR /&gt;Hi Benji,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Not sure if I understand Scott's idea correctly, but I'd be very careful with embedding any "secrets" in an Add-On. Such a "secret" can usually be extracted from a binary quite easily. In general I'd assume any data processed on one machine is visible to the owners of that machine and this includes compilation artifacts and thus your Add-On.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I'm using a different approach for my licensing mechanisms. This doesn't necessitate another account for your users.&lt;BR /&gt;It needs an asymmetric signing algorithm. RSA for example. But I'd recommend to just go with libsodium.&lt;BR /&gt;With asymmetric algorithms you have a keypair consisting of a public and a private key. Then you can sign messages with the private key and everybody with the public key can verify that only you would be able to send such message.&lt;BR /&gt;With that in mind, here's my approach:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;You get the GSID from your users (found on companymanagement.graphisoft.com).&lt;BR /&gt;You "don't care" if users submit a wrong GSID here.&lt;/LI&gt;
&lt;LI&gt;You sign a message with your private key on your server. The message includes their GSID.&lt;/LI&gt;
&lt;LI&gt;Send the message to your users (e.g. per mail, make a license installer for them, something like that)&lt;BR /&gt;This message can in principle be given to "anybody" (you might need to be careful about Data Protection guidelines since a GSID might be considered personal identifiable information.)&lt;/LI&gt;
&lt;LI&gt;In your Add-On you receive this message somehow (e.g. user stores a file) and the add-on can verify with the public key, that the content of the message was signed by you.&lt;/LI&gt;
&lt;LI&gt;Compare the current GSID of the Archicad Environment with the GSID in your message.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;Hope this gives you a rough idea &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The difference here is, that the used public key was never intended to be a secret. So it can be extracted by "malicious" users without any damage to you.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;Edit: Also you with this approach you "don't have to care" whether the ID submitted by your user is a valid ID associated with a Graphisoft Account. When they submit a wrong one, than the last step will fail.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Best,&lt;BR /&gt;Bernd&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 10 Jun 2026 06:22:18 GMT</pubDate>
      <guid>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704768#M10921</guid>
      <dc:creator>BerndSchwarzenbacher</dc:creator>
      <dc:date>2026-06-10T06:22:18Z</dc:date>
    </item>
    <item>
      <title>Re: Authenticating an Archicad user in a 3rd party system</title>
      <link>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704933#M10923</link>
      <description>&lt;P&gt;Bernd's idea of using a proper private/public key combination is much better.&amp;nbsp; &lt;span class="lia-unicode-emoji" title=":smiling_face_with_smiling_eyes:"&gt;😊&lt;/span&gt;&lt;BR /&gt;My idea was the baby version, with a potential security exploit if someone knew how to decompile the apx binary and expose the hash secret.&lt;/P&gt;</description>
      <pubDate>Thu, 11 Jun 2026 02:19:05 GMT</pubDate>
      <guid>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704933#M10923</guid>
      <dc:creator>scottjm</dc:creator>
      <dc:date>2026-06-11T02:19:05Z</dc:date>
    </item>
    <item>
      <title>Re: Authenticating an Archicad user in a 3rd party system</title>
      <link>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704962#M10925</link>
      <description>&lt;P&gt;Hello Bernd, thanks for sharing your solution.&lt;/P&gt;
&lt;P&gt;Yes that idea is better.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I guess you'd have to decompile/recompile the add-on and remove function calls to circumvent that license check, or perhaps replace the embedded public key. Feels way harder compared to extracting a secret from the binary.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 11 Jun 2026 09:42:37 GMT</pubDate>
      <guid>https://community.graphisoft.com/t5/Archicad-C-API/Authenticating-an-Archicad-user-in-a-3rd-party-system/m-p/704962#M10925</guid>
      <dc:creator>BenjiDev</dc:creator>
      <dc:date>2026-06-11T09:42:37Z</dc:date>
    </item>
  </channel>
</rss>

