<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>JWT on Kelly Dev</title><link>https://kelly-chui.github.io/tags/jwt/</link><description>Recent content in JWT on Kelly Dev</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 20 Nov 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://kelly-chui.github.io/tags/jwt/index.xml" rel="self" type="application/rss+xml"/><item><title>SniffMEET. JWT와 Supabase RLS 정책에 연결하기</title><link>https://kelly-chui.github.io/posts/sniffmeet-dev-log-supabase-jwt-rls/</link><pubDate>Wed, 20 Nov 2024 00:00:00 +0000</pubDate><guid>https://kelly-chui.github.io/posts/sniffmeet-dev-log-supabase-jwt-rls/</guid><description>&lt;p&gt;Supabase Auth로 로그인하면 클라이언트는 Access Token으로 JWT를 받는다. Supabase는 요청에 포함된 JWT를 검증하고, 그 안의 사용자 정보와 역할을 RLS 정책에 전달한다.&lt;/p&gt;
&lt;pre class="mermaid" data-mermaid-source="flowchart&amp;#43;LR%0A&amp;#43;&amp;#43;&amp;#43;&amp;#43;Client%5B%22%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8%22%5D&amp;#43;--%3E%7C%22JWT%EB%A5%BC&amp;#43;%ED%8F%AC%ED%95%A8%ED%95%9C&amp;#43;%EC%9A%94%EC%B2%AD%22%7C&amp;#43;Supabase%5B%22Supabase&amp;#43;API%22%5D%0A&amp;#43;&amp;#43;&amp;#43;&amp;#43;Supabase&amp;#43;--%3E%7C%22JWT&amp;#43;%EA%B2%80%EC%A6%9D%22%7C&amp;#43;Claims%5B%22sub%2C&amp;#43;role&amp;#43;%EB%93%B1%EC%9D%98&amp;#43;%ED%81%B4%EB%A0%88%EC%9E%84%22%5D%0A&amp;#43;&amp;#43;&amp;#43;&amp;#43;Claims&amp;#43;--%3E&amp;#43;RLS%5B%22PostgreSQL&amp;#43;RLS&amp;#43;%EC%A0%95%EC%B1%85%22%5D%0A&amp;#43;&amp;#43;&amp;#43;&amp;#43;RLS&amp;#43;--%3E&amp;#43;Database%5B%22%ED%97%88%EC%9A%A9%EB%90%9C&amp;#43;%ED%96%89%EB%A7%8C&amp;#43;%EC%A1%B0%ED%9A%8C&amp;#43;%EB%98%90%EB%8A%94&amp;#43;%EB%B3%80%EA%B2%BD%22%5D"&gt;&lt;/pre&gt;&lt;h2 id="jwt의-클레임"&gt;JWT의 클레임&lt;/h2&gt;
&lt;p&gt;JWT는 헤더, 페이로드, 서명으로 구성된다. 각 부분은 Base64URL로 인코딩되지만 암호화되지는 않으므로 페이로드에 비밀 정보를 넣으면 안 된다. 서명은 헤더와 페이로드가 변조되지 않았는지 검증하는 데 사용한다.&lt;/p&gt;
&lt;p&gt;Supabase의 JWT에는 다음과 같은 클레임이 포함된다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sub&lt;/code&gt;: 사용자의 고유 ID&lt;/li&gt;
&lt;li&gt;&lt;code&gt;role&lt;/code&gt;: RLS를 적용할 PostgreSQL 역할&lt;/li&gt;
&lt;li&gt;&lt;code&gt;iat&lt;/code&gt;: 토큰이 발급된 시각&lt;/li&gt;
&lt;li&gt;&lt;code&gt;exp&lt;/code&gt;: 토큰이 만료되는 시각&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="supabase에서-jwt-사용하기"&gt;Supabase에서 JWT 사용하기&lt;/h2&gt;
&lt;p&gt;RLS는 PostgreSQL이 행 단위로 접근을 제한하는 기능이다. Supabase에서는 &lt;code&gt;auth.uid()&lt;/code&gt;로 현재 JWT의 &lt;code&gt;sub&lt;/code&gt; 값을 가져와 행의 사용자 ID와 비교할 수 있다.&lt;/p&gt;</description></item></channel></rss>