<?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: Sam Huckaby</title>
    <description>The latest articles on DEV Community by Sam Huckaby (@samhuckaby).</description>
    <link>https://dev.to/samhuckaby</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%2Fuser%2Fprofile_image%2F1014702%2Fa59090df-a942-4c91-9c02-9cf964c04dab.jpeg</url>
      <title>DEV Community: Sam Huckaby</title>
      <link>https://dev.to/samhuckaby</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/samhuckaby"/>
    <language>en</language>
    <item>
      <title>Understanding OAuth - Terminology</title>
      <dc:creator>Sam Huckaby</dc:creator>
      <pubDate>Mon, 06 Nov 2023 03:04:31 +0000</pubDate>
      <link>https://dev.to/samhuckaby/understanding-oauth-terminology-3jn9</link>
      <guid>https://dev.to/samhuckaby/understanding-oauth-terminology-3jn9</guid>
      <description>&lt;p&gt;In my last post, we walked through some real-world systems that map roughly to the OAuth framework. In this article, we will discuss the key terms that go along with the framework.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/AjXKQnH-LLE"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;I’ll be honest with you, I love big words, but I can’t always &lt;em&gt;remember&lt;/em&gt; big words. So in this post, we’ll look at the big words that OAuth uses most frequently and try to break each one down into smaller, more memorable pieces.&lt;br&gt;
To start, we have the &lt;strong&gt;Resource Owner&lt;/strong&gt;, which is often thought of as just “the user”, but is actually the person or machine who &lt;em&gt;should&lt;/em&gt; be able to access… something&lt;br&gt;
That “something” is a &lt;strong&gt;Protected Resource&lt;/strong&gt;, which is just a fancy way to refer to that thing-i-only-want-certain-people-to-touch. To put it in context, this might be the photo album in your social media account that you want to upload embarrassing karaoke pictures into.&lt;br&gt;
This brings us to the &lt;strong&gt;Relying Party&lt;/strong&gt;, which is NOT the most boring party ever, but is instead the party or application that must rely on another source for authentication. This might be the social media platform that needs some other source to confirm that the user is allowed to access those prized karaoke pictures.&lt;br&gt;
That “other source” that the Relying Party uses to determine users’ authorization is called the &lt;strong&gt;Authorization Server&lt;/strong&gt;. This term tends to get muddied the most, and can be called a range of things like “Authorization Provider” or “OIDC Provider”. I personally prefer the term “Authorization Provider” because this actor &lt;em&gt;provides&lt;/em&gt; authorization as a service, and is not necessarily a free-standing “server”. The Authorization Provider will usually be a third party source like Google or Beyond Identity, that provides authentication as a service so that your users can log in.&lt;br&gt;
Once the user is authenticated, the Relying Party is able to retrieve one or more &lt;strong&gt;Tokens&lt;/strong&gt; which provide critical information. There are two key tokens that you need to be aware of, and those are the &lt;strong&gt;Access Token&lt;/strong&gt; and the &lt;strong&gt;ID Token&lt;/strong&gt;. The ID Token is optional and may be requested in various ways. It is intended specifically to be used by the client-facing portion of the Relying Party to identify aspects about the User. The Access Token is intended to be used by the server-facing side of the Relying Party, and should never be visible to the client. It is used to provide authenticated access to upstream servers or services -  like that photo album service, so you can delete those karaoke pictures before it’s too late. Seriously. Go delete those pictures.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Understanding OAuth - Overview</title>
      <dc:creator>Sam Huckaby</dc:creator>
      <pubDate>Mon, 06 Nov 2023 02:40:35 +0000</pubDate>
      <link>https://dev.to/samhuckaby/understanding-oauth-overview-51fk</link>
      <guid>https://dev.to/samhuckaby/understanding-oauth-overview-51fk</guid>
      <description>&lt;p&gt;If you are reading this article, it's very likely that you have found yourself needing to understand the workings of OAuth. This is in some ways a very commendable task, because OAuth is one of the most used and important authorization frameworks used across the internet.&lt;/p&gt;

&lt;p&gt;OAuth is in some ways quite simple and in other ways quite complex, but I will attempt to dispel at least some of the mysticism surrounding it. To do this, we will take a look at how OAuth corresponds to some real-world systems.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/ixaeWftZ03Q"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;OAuth is the “authorization framework” used across the web. The technical name can make it seem somewhat mysterious, but in reality, it describes a pattern (a.k.a. framework) of access that is common even outside the realm of computers. The problem that OAuth is trying to solve is secure authentication by a third party, or you might say, allowing someone I trust to determine if my users are who they say they are. This is important because not every entity is built with authentication in mind, but almost every entity requires some level of authentication. Some examples might be a valet who needs to be sure they give keys to the right people, or a doctor who wants to be sure she has the right person’s medical history up when prescribing medication..&lt;/p&gt;

&lt;p&gt;Let’s take a look at a real-world example to see how this pattern plays out. Imagine you’re getting ready to fly to your next vacation destination, somewhere beautiful, like Michigan. You’re going to purchase a ticket from an airline (the &lt;strong&gt;relying party&lt;/strong&gt; or client) and provide some identifying information about yourself. The airline has no way of knowing if the information you have provided is real, because they are not built to handle identifying every person on earth, so they rely on an &lt;strong&gt;authorization provider&lt;/strong&gt; which in this case is the government which issued your passport. Now, when the time comes for you to head to beautiful Michigan, you arrive at the airport and in order to sit in your seat on the plane (the &lt;strong&gt;protected resource&lt;/strong&gt;) you are redirected by the airport to a security checkpoint first that allows your identity to be confirmed by agents of your &lt;strong&gt;authorization provider&lt;/strong&gt;. You give them your boarding pass (which is sort of like an &lt;strong&gt;authorization code&lt;/strong&gt;) and your passport and then you are granted access to the plane, assuming you didn’t steal someone’s identity.&lt;br&gt;
In a nutshell, this is how OAuth works too. A user (&lt;strong&gt;resource owner&lt;/strong&gt;) interacting with a client (&lt;strong&gt;relying party&lt;/strong&gt;) is referred to a (possibly) third party &lt;strong&gt;authorization provider&lt;/strong&gt; that validates the user and then returns an &lt;strong&gt;authorization code&lt;/strong&gt; which the client can exchange for a &lt;strong&gt;token&lt;/strong&gt; (or tokens) that grants them access to a protected resource.&lt;/p&gt;

&lt;p&gt;Check out the next post for a detailed walkthrough of the terminology used above.&lt;/p&gt;

</description>
      <category>oauth</category>
    </item>
    <item>
      <title>What I like about Bytes</title>
      <dc:creator>Sam Huckaby</dc:creator>
      <pubDate>Sat, 28 Jan 2023 23:19:48 +0000</pubDate>
      <link>https://dev.to/samhuckaby/what-i-like-about-bytes-5eh7</link>
      <guid>https://dev.to/samhuckaby/what-i-like-about-bytes-5eh7</guid>
      <description>&lt;p&gt;It's been a wild ride since I discovered and first subscribed to the Bytes newsletter. It really has been my go-to place for information about what is happening across the JS-verse. In the most recent article it was noted that no one had written an article detailing what is so great about their newsletter and so I decided to fix this.&lt;/p&gt;

&lt;p&gt;I have almost no experience with other technical newsletters, so there will be limited comparisons in this article. But let's be honest, if you're reading this, you don't really want a comparison, you just want to hear why I love Bytes, and maybe some jokes along the way.&lt;/p&gt;

&lt;p&gt;I'd like to say I rewrote my entire newsletter to use Bytes, but frankly, that sentence makes no sense, and I don't write any newsletters. Instead, below are the reasons why Bytes is the only newsletter I subscribe to and why I think you should too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bytes provides actually information
&lt;/h2&gt;

&lt;p&gt;I don't subscribe to any other tech newsletter. Maybe you think this is crazy, but honestly, reading Twitter usually gives me a faster flow of information than a semi-regular email that I may or may not check. Bytes is the first and only tech newsletter that I've put in the effort to read regularly, and that is basically because it's comedy gold. When Astro.build hit my radar, it wasn't just because a couple people I follow on Twitter said it was cool (yes, that helped) but because I saw the words Astro.build in a Bytes newsletter and realized I hadn't played with a new library or framework lately and clicked the link. It's not important that I still haven't built anything with Astro (I &lt;em&gt;definitely&lt;/em&gt; will) but rather that Bytes was the catalyst that convinced me to say I would try it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bytes gives me a reason to &lt;del&gt;get up in the morning&lt;/del&gt; read it
&lt;/h2&gt;

&lt;p&gt;Bytes has provided me with content that I love, sarcasm that hurts me (in a good way), programming puzzles that I actually attempt to solve, and a pulse on frameworks that I am actually interested in. While I'm not looking for a job, I still carefully peruse the job listings in each edition so I can a) mock the ones I think are silly and b) mercilessly bombard my friend with links to apply because their job "isn't cool enough, and you should try something new". Sometimes Bytes even includes Twitter content, so that's one less thread I will need to read and like all the replies on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bytes doesn't waste time with non-JS stuff
&lt;/h2&gt;

&lt;p&gt;We get it, Rust is awesome, type-safe, and &lt;em&gt;blazingly fast&lt;/em&gt;. I'm just not smart enough to learn how to use it. It's always painful to watch &lt;a href="https://www.youtube.com/watch?v=Mccy6wuq3JE"&gt;two genius-level developers show me how easy it is to write Rust in a YouTube video&lt;/a&gt; I can't ignore. Bytes on the other hand understands that I am a lowly front-end developer who loves JS and has been writing it for more than two decades. I get it, I could setup an API with Scala or Go much faster, but I understand Node.js. I use NextJS because it's a framework I wish I had built myself, even if the API setup can be confusing sometimes. Bytes doesn't try to convince me I'm wrong for loving JavaScript, it sits down next to me, nods in agreement, and then helps me find a new helper library to fix something underscore solved a long time ago.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Maybe you finished this article and you thought, "wait, do you actually think I SHOULD read Bytes?" and the answer is yes. If you want content that is actually interesting, gives you non-farming takes on web tech, and understands that you love JS even if there are other options out there, then you want to read Bytes. It's basically the wordle that you only have to remember once a week and you always win in under four guesses. Take the W and &lt;a href="https://bytes.dev/"&gt;go subscribe to Bytes&lt;/a&gt; for a way better read than this article was.&lt;/p&gt;

</description>
      <category>opinion</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
