<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Jerry</title>
    <link>https://infosec.press/jerry/</link>
    <description></description>
    <pubDate>Tue, 05 May 2026 01:05:21 +0000</pubDate>
    <item>
      <title>Test</title>
      <link>https://infosec.press/jerry/test</link>
      <description>&lt;![CDATA[Test&#xA;Testing federation.]]&gt;</description>
      <content:encoded><![CDATA[<p>Test
Testing federation.</p>
]]></content:encoded>
      <guid>https://infosec.press/jerry/test</guid>
      <pubDate>Sun, 17 Dec 2023 17:08:54 +0000</pubDate>
    </item>
    <item>
      <title>This is a #test</title>
      <link>https://infosec.press/jerry/this-is-a-test</link>
      <description>&lt;![CDATA[This is a #test&#xA;]]&gt;</description>
      <content:encoded><![CDATA[<p>This is a <a href="/jerry/tag:test" class="hashtag" rel="nofollow"><span>#</span><span class="p-category">test</span></a></p>
]]></content:encoded>
      <guid>https://infosec.press/jerry/this-is-a-test</guid>
      <pubDate>Fri, 20 Jan 2023 21:00:35 +0000</pubDate>
    </item>
    <item>
      <title>How to user Mastodon&#39;s built-on oauth provider as the authentication provider for WriteFreely</title>
      <link>https://infosec.press/jerry/how-to-user-mastodons-built-on-oauth-provider-as-the-authentication-provider</link>
      <description>&lt;![CDATA[Mastodon is an amazingly flexible application, including exposing an oauth API that can be used by other applications as an authentication source.  Wrtefreely is a very clean, minimalist, fediverse-native blogging platform.  One thing it doesn&#39;t do, though, is handle authentication well.  For example, there is no provision for verifying the email address of a person signing up, nor provisions for multifactor authentication.  But it does support oauth authentication providers.  Enter Mastodon.&#xA;&#xA;Writefreely is one of the more common requests of people on infosec.exchange, and I am all in on the fediverse, hoping to show the possibilities and value of the fediverse.  And I like the technical challenge that comes with setting these things up and administering them, somewhat at scale.&#xA;&#xA;What is NOT clear, and not well documented for the uninitiated is exactly how to configure WriteFreely to use Mastodon for authentication.  Hopefully this writeup helps others.  &#xA;&#xA;I recommend that you follow these steps before you try to log in for the first time.  WriteFreely sets the first login as the administrator, and it&#39;s a PITA to change it.&#xA;&#xA;The first step is to create an application on your Mastodon instance.  Obviously, substitute infosec.exchange for your own (or use infosec.exchange - that&#39;s ok, too).  Run this command from a unixy shell:&#xA;&#xA;curl -X POST  -F &#39;clientname=Login with Infosec.Exchange&#39;    -F &#39;redirecturis=https://infosec.press/oauth/callback/generic&#39;       -F &#39;scopes=read: accounts&#39;  -F &#39;website=https://infosec.exchange&#39; https://infosec.exchange/api/v1/apps&#39;&#xA;&#xA;This will return a string that looks like:&#xA;{&#34;id&#34;:&#34;62724&#34;,&#34;name&#34;:&#34;Login with Infosec.Exchange&#34;,&#34;website&#34;:&#34;https://infosec.exchange&#34;,&#34;redirecturi&#34;:&#34;https://infosec.press/oauth/callback/generic&#34;,&#34;clientid&#34;:&#34;clientIDstring&#34;,&#34;clientsecret&#34;:&#34;clientSecretString&#34;,&#34;vapidkey&#34;:&#34;VapidKeyString&#34;}&#xA;&#xA;There will be key values in where the  is in the above example.  You will use clientIDstring and clientSecretString, but will not use VapidKeyString.&#xA;&#xA;Next, in the config.ini file you created, find this section at the end of the file and delete everything below:&#xA;[oauth.generic]&#xA;&#xA;Then, copy/paste the follow:&#xA;&#xA;`clientid = clientIDstring&#xA;clientsecret = clientSecretString&#xA;host = https://infosec.exchange&#xA;displayname = Infosec.Exchange&#xA;tokenendpoint = /oauth/token&#xA;inspectendpoint = /api/v1/accounts/verifycredentials&#xA;authendpoint = /oauth/authorize&#xA;scope = read: accounts&#xA;allowdisconnect = false&#xA;mapuserid = id`&#xA;&#xA;Making the necessary substitutions for the key and the Mastodon instance you&#39;re authenticating against.  &#xA;&#xA;If you want to only permit logins through oauth (this is my recommendation), also change this value:&#xA;disablepasswordauth = false&#xA;to&#xA;disablepasswordauth = true&#xA;&#xA;Once done, run systemctl restart writefreely.service or whatever you named your system unit file and you should be in business.]]&gt;</description>
      <content:encoded><![CDATA[<p>Mastodon is an amazingly flexible application, including exposing an oauth API that can be used by other applications as an authentication source.  Wrtefreely is a very clean, minimalist, fediverse-native blogging platform.  One thing it doesn&#39;t do, though, is handle authentication well.  For example, there is no provision for verifying the email address of a person signing up, nor provisions for multifactor authentication.  But it does support oauth authentication providers.  Enter Mastodon.</p>

<p>Writefreely is one of the more common requests of people on infosec.exchange, and I am all in on the fediverse, hoping to show the possibilities and value of the fediverse.  And I like the technical challenge that comes with setting these things up and administering them, somewhat at scale.</p>

<p>What is NOT clear, and not well documented for the uninitiated is exactly how to configure WriteFreely to use Mastodon for authentication.  Hopefully this writeup helps others.</p>

<p>I recommend that you follow these steps before you try to log in for the first time.  WriteFreely sets the first login as the administrator, and it&#39;s a PITA to change it.</p>

<p>The first step is to create an application on your Mastodon instance.  Obviously, substitute infosec.exchange for your own (or use infosec.exchange – that&#39;s ok, too).  Run this command from a unixy shell:</p>

<p><code>curl -X POST  -F &#39;client_name=Login with Infosec.Exchange&#39;    -F &#39;redirect_uris=https://infosec.press/oauth/callback/generic&#39;       -F &#39;scopes=read: accounts&#39;  -F &#39;website=https://infosec.exchange&#39; https://infosec.exchange/api/v1/apps&#39;</code></p>

<p>This will return a string that looks like:
<code>{&#34;id&#34;:&#34;62724&#34;,&#34;name&#34;:&#34;Login with Infosec.Exchange&#34;,&#34;website&#34;:&#34;https://infosec.exchange&#34;,&#34;redirect_uri&#34;:&#34;https://infosec.press/oauth/callback/generic&#34;,&#34;client_id&#34;:&#34;&lt;clientIDstring&gt;&#34;,&#34;client_secret&#34;:&#34;&lt;clientSecretString&gt;&#34;,&#34;vapid_key&#34;:&#34;&lt;VapidKeyString&gt;&#34;}</code></p>

<p>There will be key values in where the &lt;&gt; is in the above example.  You will use <code>&lt;clientIDstring&gt;</code> and <code>&lt;clientSecretString&gt;</code>, but will not use <code>&lt;VapidKeyString&gt;</code>.</p>

<p>Next, in the config.ini file you created, find this section at the end of the file and delete everything below:
<code>[oauth.generic]</code></p>

<p>Then, copy/paste the follow:</p>

<p><code>client_id = &lt;clientIDstring&gt;
client_secret = &lt;clientSecretString&gt;
host = https://infosec.exchange
display_name = Infosec.Exchange
token_endpoint = /oauth/token
inspect_endpoint = /api/v1/accounts/verify_credentials
auth_endpoint = /oauth/authorize
scope = read: accounts
allow_disconnect = false
map_user_id = id</code></p>

<p>Making the necessary substitutions for the key and the Mastodon instance you&#39;re authenticating against.</p>

<p>If you want to only permit logins through oauth (this is my recommendation), also change this value:
<code>disable_password_auth = false</code>
to
<code>disable_password_auth = true</code></p>

<p>Once done, run <code>systemctl restart writefreely.service</code> or whatever you named your system unit file and you should be in business.</p>
]]></content:encoded>
      <guid>https://infosec.press/jerry/how-to-user-mastodons-built-on-oauth-provider-as-the-authentication-provider</guid>
      <pubDate>Mon, 16 Jan 2023 00:22:19 +0000</pubDate>
    </item>
  </channel>
</rss>