<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: DID.app</title>
    <description>The latest articles on DEV Community by DID.app (@did).</description>
    <link>https://dev.to/did</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F2478%2Fd0ee9fc1-1be9-4875-a95c-36298347aff2.jpg</url>
      <title>DEV Community: DID.app</title>
      <link>https://dev.to/did</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/did"/>
    <language>en</language>
    <item>
      <title>Building The Best One Click Sign In</title>
      <dc:creator>Richard Shepherd</dc:creator>
      <pubDate>Wed, 03 Jun 2020 11:35:56 +0000</pubDate>
      <link>https://dev.to/did/building-the-best-one-click-sign-in-4dng</link>
      <guid>https://dev.to/did/building-the-best-one-click-sign-in-4dng</guid>
      <description>&lt;p&gt;&lt;strong&gt;Abstract: One click sign in using device authentication offers convenience and security to the user.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One click sign in allows users to authenticate in just one click.  Delivering this was the reason DID.app was started. This is our story of implementing one click sign in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do we need one click sign in?
&lt;/h2&gt;

&lt;p&gt;Users have ‘account creation fatigue’. The average person already has 150+ accounts and the problem is still getting worse. There are so many websites that want you to create an account and it's hard to keep track of them all.&lt;/p&gt;

&lt;p&gt;Users want to engage but without filling in endless forms.  We also know users crave passwordless experiences by the rapid growth of password managers both in and out of the browser.  Password managers simulate a passwordless sign in but only serve to paper over the root of the problem.  They are cumbersome to set up a very desirable target for hackers.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does one click sign in work?
&lt;/h2&gt;

&lt;p&gt;Single factor authentication can relies on either: &lt;a href="https://did.app/articles/the-three-factors-of-authentication"&gt;something you know, something you have or something you are&lt;/a&gt;.  In a typical username and password setup, the user relies on something only they know (their password) to prove their identity.  For one click sign in, we rely on something nearly ever user already has with them, their personal devices. &lt;/p&gt;

&lt;p&gt;The user authenticates by proving they have access to a specific device. If the device is present, the user is authenticated.  This is achieved with a simple cryptographic transaction between DID.app and the user’s device initiated by a single click.&lt;/p&gt;

&lt;p&gt;Users should be familiar with this type of authentication. It works on the same principle as using as a key to unlock your front door or using debit card to pay for something.  These are both forms of authentication that rely on something the users has (a key or a debit card) and are used multiple times every day.&lt;/p&gt;

&lt;p&gt;DID.app's One Click Sign In works using cryptography.  A key pair generated and stored by the device are challenged by DID.app to prove identity.  The user actually has to have access to the physical device for One Click Sign In to work.  Users can set up multiple devices if they regularly use more than one device.  This greatly reduces the threat of account theft because hacking is only economical on scale and without actually having to steal a person's handbag.&lt;/p&gt;

&lt;h2&gt;
  
  
  Speed, Security and Safeguards
&lt;/h2&gt;

&lt;p&gt;DID.app is focused on fast, simple and secure authentication.&lt;/p&gt;

&lt;p&gt;Most devices today are already valuable to their owners. Most are protected by passcodes or biometric protection like fingerprint scanning or facial recognition. Devices are rarely far from their owners for long. And if one is lost DID.app makes it easy to remotely revoke the permissions the device had. &lt;/p&gt;

&lt;p&gt;By comparison, passwords are vulnerable to phishing, guesswork and brute force.  Social media accounts secured with passwords fall victim to the same threat and even some text messaging based MFA has weaknesses given that sim cards can be cloned.&lt;/p&gt;

&lt;p&gt;No solution is perfect but device authentication is the least scalable form of account theft simply by virtue of the fact the hacker must have access to an unlocked physical device.&lt;/p&gt;

&lt;p&gt;Finally, the best solutions recognise when a fallback may be needed.  On the rare occasion the user wants to use a shared computer to access their account, One Click Sign In is not possible so DID.app falls back to &lt;a href="https://did.app/articles/building-the-best-magic-link"&gt;magic links&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  One Click Sign In Goes Hand in Hand With Conversions
&lt;/h2&gt;

&lt;p&gt;One click sign in is all about convenience.  Users hate creating accounts, it’s not rocket science. What’s there to love about coming up with a new password or endlessly forgetting which social network you used to sign in last time?&lt;/p&gt;

&lt;p&gt;Convenience for the user equals conversions for your website.  If you’re authenticating at all, you are looking for user engagement.  Users turning away at sign up isn’t great use of marketing spend. No solution will ever induce a 100% conversion rate but One Click Sign In can help cut your losses.&lt;/p&gt;

&lt;p&gt;There is perhaps a more pressing point than conversions.  One Click Sign In is also about being respectful of your user’s time and giving them the best possible customer service experience you can muster.&lt;/p&gt;

&lt;p&gt;Happy customers are usually easier to work with.  The genuine convenience of One Click Sign In gives users a truly frictionless authentication experience.  Users end up in a much better frame of mind than if they’d been sent round the houses on a whistlestop tour of their inbox, your password reset pages and back to the sign in page again.  &lt;/p&gt;

&lt;p&gt;If you would like to find out more about the technical inner workings of DID, read our &lt;a href="https://did.app/articles/how-did-works"&gt;‘How DID Works’&lt;/a&gt; page.  If you have any questions about one click sign in, please email us: &lt;a href="//mailto:team@did.app"&gt;team@did.app&lt;/a&gt;&lt;/p&gt;

</description>
      <category>oneclicksignin</category>
      <category>authentication</category>
      <category>passwordless</category>
    </item>
    <item>
      <title>What is OAuth? Understanding the authorization layer</title>
      <dc:creator>Richard Shepherd</dc:creator>
      <pubDate>Tue, 02 Jun 2020 15:20:34 +0000</pubDate>
      <link>https://dev.to/did/what-is-oauth-understanding-the-authorization-layer-439g</link>
      <guid>https://dev.to/did/what-is-oauth-understanding-the-authorization-layer-439g</guid>
      <description>&lt;p&gt;OAuth is short for Open Authorization.  &lt;/p&gt;

&lt;p&gt;OAuth 2.0 is a framework for token-based authorization on the web. What does that mean?  Basically, OAuth is a way for websites to share private information that belongs to an authenticated user of that website.  Authorization tokens are issued which grants access to specific pieces of information hence the term token-based authorization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OAuth 1.0 and OAuth 2.0 are distinctly different.  When I refer to OAuth I am referring specifically to OAuth 2.0.  If you would like to find out more about the differences between versions 1 and 2 you can&lt;a href="https://en.wikipedia.org/wiki/OAuth"&gt; read the OAuth entry on Wikipedia&lt;/a&gt; as the differences are not relevant to this article.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For example, let’s say you want to share your social media profile with a dating website.  You would like the social media website to share your name, date of birth and profile image.  OAuth can be used to grant the dating app access to those details on the social media website.  &lt;/p&gt;

&lt;p&gt;The framework allows the social media website to create an access token which the dating website uses to request the data you shared from your social media profile.&lt;/p&gt;

&lt;p&gt;This method allows you, the user, to share specific pieces of information stored on one website with another website.  Before OAuth was invented, if two websites wanted to share information they had little choice but to share actual login credentials and therefore share all the information stored in that account.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Third-party applications gain overly broad access to the resource owner's protected resources, leaving resource owners without any ability to restrict duration or access to a limited subset of resources.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://tools.ietf.org/html/rfc6749"&gt;Source - The OAuth 2.0 Authorization Framework By the Internet Engineering Task Force&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;OAuth is all about granting authorization to access private things.  OAuth is not used for authentication.  A mistake commonly made is to assume the ‘auth’ in OAuth stands for authentication.&lt;/p&gt;

&lt;p&gt;DID.app is an authentication provider that works with the OAuth 2.0 framework helping to add an authentication layer on top of OAuth's authorization layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does OAuth work?
&lt;/h2&gt;

&lt;p&gt;This diagram illustrates the six steps that are taken when one website requests information from another:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s6kmtVwC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3hgmpnwyp4cmu4a9ru5k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s6kmtVwC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3hgmpnwyp4cmu4a9ru5k.png" alt="Diagram showing the 6 steps of OAuth" width="576" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By granting access, the resource owner gives the requesting website (client) to ask the authorization server for access to the resource the owner has given it permission to access.&lt;/p&gt;

&lt;p&gt;A token is exchanged which is used to prove to the resource server that the requesting website has authorization to access the resource.&lt;/p&gt;

&lt;h2&gt;
  
  
  The difference between authorization and authentication
&lt;/h2&gt;

&lt;p&gt;OAuth is referenced a lot when discussing authentication.  This is largely because when a website authenticates a user it typically wants to give that user authorization to access protected resources such as pages on a website or images on a server.&lt;/p&gt;

&lt;p&gt;Authentication and authorization, therefore, go hand in hand but they are distinctly different.&lt;/p&gt;

&lt;p&gt;Authentication is the process of proving a user is who they say they are.  When you visit a website to access your account you need to tell the website who you are so they can show you the right private pages and you need to prove your identity.&lt;/p&gt;

&lt;p&gt;This can be done in a variety of ways but &lt;a href="https://did.app/articles/the-three-factors-of-authentication"&gt;authentication always boils down to three factors&lt;/a&gt;: what you know, what you have, and what you are.  &lt;/p&gt;

&lt;p&gt;In the case of DID.app, we authenticate users by asking them to prove they have access to their email account or a previously registered device.  &lt;a href="https://did.app/articles/how-did-works"&gt;Find out more about how DID works here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Authorization on the other hand is the process of giving your authenticated user access to certain protected resources.  So, user A might be authenticated by DID.app and the website then knows that user A is authorized to access protected resources 1, 2 and 3.&lt;/p&gt;

&lt;p&gt;The key takeaway is that OAuth doesn’t do authentication.&lt;/p&gt;

&lt;h2&gt;
  
  
  OAuth’s relationship with DID.app
&lt;/h2&gt;

&lt;p&gt;You will no doubt be wondering what OAuth has got to do with DID.app since DID.app is an identity provider and, therefore, primarily concerned with authentication and not authorization.&lt;/p&gt;

&lt;p&gt;Good question.  DID.app uses OpenID Connect to share authentication states between DID.app and the requesting website.  OpenID Connect lets developers authenticate their users across websites and apps without having to own and manage password files. Once DID.app has authenticated the user with either email or a securely stored private key, this authentication state is shared with the website requesting it.&lt;/p&gt;

&lt;p&gt;OpenID Connect is an interoperable authentication protocol based on the OAuth 2.0 family of specifications.  Essentially it’s an identity layer that works perfectly with the authorization layer.&lt;/p&gt;

&lt;p&gt;OpenID Connect uses the standard message flows defined in the OAuth 2.0 specification to communicate authentication states once the authentication has taken place.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;p&gt;Here are some useful resources if you would like to find out more about OAuth, Open ID Connect or the Open ID Foundation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tools.ietf.org/html/rfc6749"&gt;OAuth 2.0 authorization framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openid.net/foundation/"&gt;Open ID foundation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://openid.net/connect/faq/"&gt;Open ID Connect FAQ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have any questions about OAuth, Open ID Connect, passwordless authentication or any of the concepts discussed on this website please do reach out to us on &lt;a href="mailto:team@did.app"&gt;team@did.app&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>oauth</category>
      <category>authorization</category>
      <category>authentication</category>
      <category>openidconnect</category>
    </item>
    <item>
      <title>What we learned from publishing a public roadmap and listening to users.</title>
      <dc:creator>Richard Shepherd</dc:creator>
      <pubDate>Thu, 28 May 2020 14:10:50 +0000</pubDate>
      <link>https://dev.to/did/what-we-learned-from-publishing-a-public-roadmap-and-listening-to-users-ke9</link>
      <guid>https://dev.to/did/what-we-learned-from-publishing-a-public-roadmap-and-listening-to-users-ke9</guid>
      <description>&lt;p&gt;To what extent do you allow your users and customers guide your development process?  This is a question we have grappled with over the last year and, frankly, continue to debate passionately at our morning &lt;a href="https://dictionary.cambridge.org/dictionary/english/powwow"&gt;pow wow&lt;/a&gt;.  But, today is the first time we have shipped a purely user-requested feature and it feels like a significant milestone.&lt;/p&gt;

&lt;p&gt;For context, the requested feature allows you to start customising the appearance of DID.app’s sign in pages to ensure your authentication aligns with your brand.  &lt;a href="https://did.nolt.io/9"&gt;Here’s the feature request on our roadmap&lt;/a&gt;.  &lt;a href="https://did.app/docs/customise-authentication-pages/"&gt;And here’s the output in our docs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This is a significant moment for a couple of reasons, first off, we allowed ourselves to be guided completely by our users.  We probably wouldn’t have come up with this feature because we, like doting parents, believed our creation was perfect and beautiful and perfect and even more beautiful snookums, kissy kissy, oochycooo cockapoo.&lt;/p&gt;

&lt;p&gt;And of course, we are right. Right?  Actually our users helped us to see something we couldn’t see and prioritise a feature that had real value to the amazing people actually using our product.&lt;/p&gt;

&lt;p&gt;Left to our own devices we would probably be releasing a more technical feature, such as &lt;a href="https://did.nolt.io/13"&gt;WebAuthN integration (also on our roadmap)&lt;/a&gt;.  This will undoubtedly be an exciting feature for our audience but it would have been at the expense of what was most pressing to our users at the time.  Unless you have ten dev ops on the team one simply has to prioritise one feature in front of another.&lt;/p&gt;

&lt;p&gt;The second reason I believe this is significant is that it can be hard to ensure your vision really resonates with your audience and achieves what you set out to achieve when you’re also trying to sell it to people.&lt;/p&gt;

&lt;p&gt;A typical prospect chat goes something like this:&lt;/p&gt;

&lt;p&gt;Prospect: “Well sure we’d love to give your product a go and pay for it but really we need it to do X first.”&lt;/p&gt;

&lt;p&gt;Product founder: “Sure, we can do that.  Give us a week and we’ll have it ready!”  - barely concealed undertones of excitement at the prospect of acquiring paying customer.&lt;/p&gt;

&lt;p&gt;Prospect: “Splendid. Speak again in a week’s time.”&lt;/p&gt;

&lt;p&gt;Product founder: “OK!” - hangs up.  Realisation that they’ve just committed themselves to developing a niche feature that is only relevant to this one user, will take a full week of development time up and stop us from developing everything else on our roadmap. &lt;/p&gt;

&lt;p&gt;In this scenario, your vision risks being put on hold.&lt;/p&gt;

&lt;p&gt;Then the question arises, is your vision resonating with your audience? Do your users want what you’re making?  &lt;/p&gt;

&lt;p&gt;This one is really hard to answer.  A week spent now developing a niche feature to win 1 customer might prevent you from developing a more widely adoptable feature that helps you win 10 more customers in a month’s time.  This is more commonly known as ‘opportunity cost’.&lt;/p&gt;

&lt;p&gt;I think the lesson learned from publishing our roadmap is that listening to your users at volume is the number one thing any product development team should be doing.  Every user you speak to has a different opinion, a different feature idea and a different view on life but they are &lt;em&gt;probably&lt;/em&gt; all united behind your vision to ‘change the world’.  &lt;/p&gt;

&lt;p&gt;The greater number of conversations you have, the more you can see if certain features (or variants of) are discussed.  There comes a point where a feature request reaches something akin to statistical significance if you will.  If this is the case and it aligns with the vision it's a perfect fit for you.&lt;/p&gt;

&lt;p&gt;In our case, our vision is to deliver &lt;a href="https://did.app/articles/how-did-works"&gt;passwordless authentication&lt;/a&gt; on equal terms to websites and end-users in a way that &lt;a href="https://did.app/articles/social-logins-have-a-privacy-problem"&gt;respects privacy&lt;/a&gt;.  Users requesting features like WebAuthN integration, custom styling or a Netlify guide fit well with the overall vision and these are specific requests that enable us and the user to more easily fulfill their requirements.&lt;/p&gt;

&lt;p&gt;Something like a feature to add password auth as a fallback is completely at odds with the vision and doesn't feel right at all, even if it does mean 1 customer &lt;em&gt;might&lt;/em&gt; come on board if we offered that feature.&lt;/p&gt;

&lt;p&gt;Defend your vision.  It’s the reason you get up in the morning and the reason you’re loyal tribe of users support you. If a feature request comes in from a new prospect that doesn’t align with your vision then think very carefully about whether the business relationship is a good fit for you.&lt;/p&gt;

&lt;p&gt;If the feature request aligns with your vision and is just another small step along the road to the goal then go for it.  Your product exists for your users.&lt;/p&gt;

&lt;p&gt;One feature I really like about the roadmap is that users can upvote features.  This seems the simplest and fairest way of putting feature development into some kind of order.&lt;/p&gt;

&lt;p&gt;And now, our developing days are guided exclusively by our public roadmap.  If it’s on the roadmap, we’re doing it. We’re excited by the way users engage with the roadmap by leaving comments and ideas.  It’s really helping users get on board with our journey to achieving the vision we’re all behind and I am delighted that we have been able to take a purely user requested feature from suggestion to production now for the first time.&lt;/p&gt;

&lt;p&gt;The first of many I am sure.&lt;/p&gt;

&lt;p&gt;I’d love to know your thoughts on publishing public product roadmaps.  If you do already, has it worked for you?  If you don’t publish a roadmap is there a reason why and what is that reason?&lt;/p&gt;

</description>
      <category>roadmap</category>
      <category>feedback</category>
      <category>passwordless</category>
    </item>
    <item>
      <title>Create buttons for 'Signing in with DID.app'</title>
      <dc:creator>Richard Shepherd</dc:creator>
      <pubDate>Thu, 14 May 2020 13:16:43 +0000</pubDate>
      <link>https://dev.to/did/create-buttons-for-signing-in-with-did-app-1490</link>
      <guid>https://dev.to/did/create-buttons-for-signing-in-with-did-app-1490</guid>
      <description>&lt;p&gt;Here at DID.app we are releasing our logos into the wild so you can create custom 'Sign in with DID.app' buttons on your (undoubtedly excellent) website.&lt;/p&gt;

&lt;p&gt;This is a super-quick guide to adding custom buttons to your website.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Head over to the &lt;a href="https://did.app/docs/button-branding-guidelines/"&gt;brand resource guidelines page&lt;/a&gt;.  There you will find all our logo images and our icon images too.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can copy and paste an example button.  Here are a few examples to choose from (feel free to design your own too):&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A light button that can be used on most pages:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qY4Ehuy4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5tw5ydl3377e3e7hgtme.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qY4Ehuy4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/5tw5ydl3377e3e7hgtme.PNG" alt="A very attractive sign in with did.app button wouldn't you say?" width="757" height="195"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div style="display:inline-block;padding:0.3em;border:1px solid gray;margin:1em;border-radius:4px;"&amp;gt;
  &amp;lt;span style="display:flex;align-items:center;"&amp;gt;
    &amp;lt;img src="/icon.svg" style="height:30px"&amp;gt;
    &amp;lt;span style="padding:0 1rem;"&amp;gt;Sign in with DID.app&amp;lt;/span&amp;gt;
  &amp;lt;/span&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A block style button:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5zaNLd_i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cva1xw98mvraqawgtjw3.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5zaNLd_i--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/cva1xw98mvraqawgtjw3.PNG" alt="Alt Text" width="300" height="91"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div style="display:inline-block;padding:0.3em;margin:1em;background:#00dfc0;color:white;"&amp;gt;
  &amp;lt;span style="display:flex;align-items:center;"&amp;gt;
    &amp;lt;img src="/logo.svg#light-mono" style="height:30px"&amp;gt;
    &amp;lt;span style="padding:0 1rem;font-weight:bold;white-space:nowrap;"&amp;gt;Sign in&amp;lt;/span&amp;gt;
  &amp;lt;/span&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A dark sign in button:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RBtKWx9S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ihk4027v3lrmxyw0j1x3.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RBtKWx9S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ihk4027v3lrmxyw0j1x3.PNG" alt="Alt Text" width="302" height="93"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div style="display:inline-block;padding:0.3em;margin:1em;background:#2a454e;color:white;"&amp;gt;
  &amp;lt;span style="display:flex;align-items:center;"&amp;gt;
    &amp;lt;img src="/logo.svg#light" style="height:30px"&amp;gt;
    &amp;lt;span style="padding:0 1rem;font-weight:bold;white-space:nowrap;"&amp;gt;Sign in&amp;lt;/span&amp;gt;
  &amp;lt;/span&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An icon only button:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IbSkfFMF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3t1uet0dmeo9s4wdo1ga.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IbSkfFMF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/3t1uet0dmeo9s4wdo1ga.PNG" alt="Alt Text" width="115" height="115"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;img src="/icon.svg#light-mono" style="height:40px;background:#00dfc0;padding:0.5em;border-radius:1em;"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To turn the image into a button that triggers the authentication flow you can create a form and add your button into the html tag that handles submission. &lt;br&gt;
Here's an example from &lt;a href="https://did.app/docs/step-by-step-integration/"&gt;DID.app's Step By Step Integration guide&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;form action="https://auth.did.app/oidc/authorize" method="get"&amp;gt;
  &amp;lt;input name="client_id" value="[CLIENT_ID]" type="hidden" /&amp;gt;
  &amp;lt;input name="redirect_uri" value="[REDIRECT_URI]" type="hidden" /&amp;gt;
  &amp;lt;input name="response_mode" value="form_post" type="hidden" /&amp;gt;

  &amp;lt;button type="submit"&amp;gt;Sign in&amp;lt;/button&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feel free to reach out to me if you have any questions about our custom buttons.  I can be found by emailing &lt;a href="mailto:team@did.app"&gt;&lt;/a&gt;&lt;a href="mailto:team@did.app"&gt;team@did.app&lt;/a&gt;&lt;/p&gt;

</description>
      <category>privacy</category>
      <category>passwordless</category>
      <category>oauth</category>
      <category>brand</category>
    </item>
    <item>
      <title>Passwordless authentication for Wordpress, here's how.</title>
      <dc:creator>Richard Shepherd</dc:creator>
      <pubDate>Mon, 23 Mar 2020 12:06:56 +0000</pubDate>
      <link>https://dev.to/did/passwordless-authentication-for-wordpress-here-s-how-5ffb</link>
      <guid>https://dev.to/did/passwordless-authentication-for-wordpress-here-s-how-5ffb</guid>
      <description>&lt;h3&gt;
  
  
  What is DID.app
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://did.app"&gt;DID.app&lt;/a&gt; is an Identity Provider, that authenticates users by verifying access to either an email address or securely stored private key.&lt;/p&gt;

&lt;p&gt;This allows your users to sign in with just a single click.&lt;/p&gt;

&lt;p&gt;This guide will step you through the process of adding DID to your Wordpress website using the ‘WordPress OpenID Connect Client' plugin by miniOrange.&lt;/p&gt;

&lt;p&gt;There is a working example website here: &lt;a href="https://wordpress.did.app"&gt;wordpress.did.app&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Requirements
&lt;/h3&gt;

&lt;p&gt;This tutorial requires you to have Wordpress installed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wordpress.org/support/category/installation/"&gt;Wordpress install guide&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Install the plugin on your Wordpress website
&lt;/h3&gt;

&lt;p&gt;In your Wordpress admin dashboard, select &lt;strong&gt;Plugins &amp;gt; Add New&lt;/strong&gt; from the main menu.&lt;/p&gt;

&lt;p&gt;On the ‘Add Plugins’ page, search: ‘&lt;strong&gt;WordPress OpenID Connect Client&lt;/strong&gt;’.  Look for the highlighted result in the screenshot below and click ‘Install Now’. Once the app has installed, click ‘Activate’.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wb7U-cvW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://did.app/assets/images/wordpress-guide/plugin-library-screenshot.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wb7U-cvW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://did.app/assets/images/wordpress-guide/plugin-library-screenshot.jpg" alt="screenshot of DID app configuration" width="880" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also visit the plugin’s page to download, install and activate manually if you prefer:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wordpress.org/plugins/miniorange-openid-connect-client/"&gt;wordpress.org/plugins/miniorange-openid-connect-client/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Setup the App on did
&lt;/h3&gt;

&lt;p&gt;You will need a DID account. &lt;a href="https://did.app"&gt;Sign up&lt;/a&gt; to create one now.&lt;/p&gt;

&lt;p&gt;After signing up, you will be directed to set up your first app.&lt;/p&gt;

&lt;p&gt;Give your new app a descriptive name e.g. ‘Wordpress Demo’ and use the full URL of the website in the ‘host’ box.&lt;/p&gt;

&lt;p&gt;DID will generate a Client ID and a Client Secret for your app.  Retain this information for the next step (leave the tab open so you can come back to it).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SUY70AAn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://did.app/assets/images/wordpress-guide/configure-did.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SUY70AAn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://did.app/assets/images/wordpress-guide/configure-did.PNG" alt="screenshot of DID app configuration" width="598" height="828"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Configure the plugin
&lt;/h3&gt;

&lt;p&gt;Once activated, the plugin creates a menu option called ‘miniOrange OpenID Connect’.  Click on this to start configuring the plugin to work with DID.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ub4u8EBl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://did.app/assets/images/wordpress-guide/plugin-in-menu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ub4u8EBl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://did.app/assets/images/wordpress-guide/plugin-in-menu.jpg" alt="screenshot of miniOrange OpenId connect plugin menu option" width="211" height="334"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You will be presented with a screen which looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--exvNwUaP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://did.app/assets/images/wordpress-guide/miniOrange-config-panel.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--exvNwUaP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://did.app/assets/images/wordpress-guide/miniOrange-config-panel.jpg" alt="screenshot of miniOrange OpenId connect plugin config dashboard" width="880" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Scroll right to the bottom on this page and look for the option called ‘&lt;strong&gt;Custom OpenID Connect App&lt;/strong&gt;’ under the heading ‘Custom Applications’.  It looks like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FovPjuNU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://did.app/assets/images/wordpress-guide/custom-applications.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FovPjuNU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://did.app/assets/images/wordpress-guide/custom-applications.PNG" alt="screenshot of miniOrange OpenId connect plugin config dashboard" width="378" height="211"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select ‘Custom OpenID Connect App’.  You will now see this screen:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ESetsSHT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://did.app/assets/images/wordpress-guide/plugin-config.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ESetsSHT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://did.app/assets/images/wordpress-guide/plugin-config.jpg" alt="screenshot of miniOrange OpenId connect plugin config dashboard" width="880" height="610"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Complete the fields using the following values:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;App Name:&lt;/strong&gt; DID&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client ID:&lt;/strong&gt; &lt;em&gt;copy and paste this from your DID app settings page.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client Secret:&lt;/strong&gt; &lt;em&gt;copy and paste this from DID app settings page.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scope: openid&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authorize Endpoint:&lt;/strong&gt; &lt;a href="https://auth.did.app/oidc/authorize"&gt;https://auth.did.app/oidc/authorize&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access Token Endpoint:&lt;/strong&gt; &lt;a href="https://auth.did.app/oidc/token"&gt;https://auth.did.app/oidc/token&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Make sure these options are set as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Set client credentials in header: checked.&lt;/li&gt;
&lt;li&gt;Set client credentials in body: unchecked.&lt;/li&gt;
&lt;li&gt;Show on login page: checked.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Finally, press ‘&lt;strong&gt;Save Settings&lt;/strong&gt;’.&lt;/p&gt;

&lt;p&gt;DID’s integration with this plugin is now complete.  A ‘Sign in with DID’ button now appears on the Wordpress sign in page:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q9SP9Mwt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://did.app/assets/images/wordpress-guide/login-with-did.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q9SP9Mwt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://did.app/assets/images/wordpress-guide/login-with-did.PNG" alt="screenshot of logging into Wordpress with DID" width="533" height="689"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Optional: Adding Login Buttons to your Wordpress Template
&lt;/h3&gt;

&lt;p&gt;You can add ‘Login with DID’ buttons elsewhere on your Wordpress website using the plugin.  To do this, choose the menu options: &lt;strong&gt;Appearance &amp;gt; Widgets&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In the example Wordpress theme we are using, we have been able to add a login button to ‘Footer 1’.  You can add the Login button widget to any dynamic part of your website templates by selecting the &lt;strong&gt;miniOrange Open ID Connect&lt;/strong&gt; widget and clicking ‘add widget’ as per the screenshot below.  The exact appearance of this will vary depending on your Wordpress theme.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lAaOcCe4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://did.app/assets/images/wordpress-guide/widget1.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lAaOcCe4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://did.app/assets/images/wordpress-guide/widget1.PNG" alt="screenshot of adding login buttons to Wordpress template content blocks" width="335" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Optional: Login Button Styling
&lt;/h3&gt;

&lt;p&gt;The ‘Login with DID’ button can be styled with some simple CSS rules.  The following CSS can be used to style the button with DID’s colour scheme:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.mo_oauth_login_button {
    display: block;
    border: 1px solid #00dfc0;
    width: auto;
    text-align: center;
    background-color: #00dfc0;
}
.mo_oauth_login_button_icon {
     display: none;
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rUhlnLyU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://did.app/assets/images/wordpress-guide/login-with-did-styling.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rUhlnLyU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://did.app/assets/images/wordpress-guide/login-with-did-styling.PNG" alt="screenshot of custom login button styling" width="437" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Have a question?
&lt;/h3&gt;

&lt;p&gt;If you have any further questions contact us at &lt;a href="//mailto:team@did.app?subject=DID-Wordpress%20question"&gt;team@did.app&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>passwordless</category>
      <category>did</category>
      <category>authentication</category>
    </item>
  </channel>
</rss>
