<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>#トークン</title>
	<atom:link href="https://ascend-beyond.com/tag/%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3/feed/" rel="self" type="application/rss+xml" />
	<link>https://ascend-beyond.com</link>
	<description></description>
	<lastBuildDate>Thu, 12 Nov 2026 01:48:56 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.4</generator>

<image>
	<url>https://ascend-beyond.com/wp-content/uploads/2024/03/cropped-9376b452e9b0c7a8bdf82cd2e63920ee-32x32.jpg</url>
	<title>#トークン</title>
	<link>https://ascend-beyond.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href=""/>	<item>
		<title>平成30年（2018年）ネスペ午後Ⅱ　問Ⅰ　解答解説</title>
		<link>https://ascend-beyond.com/study/8802/</link>
		
		<dc:creator><![CDATA[管理人]]></dc:creator>
		<pubDate>Thu, 12 Nov 2026 01:48:55 +0000</pubDate>
				<category><![CDATA[Study]]></category>
		<category><![CDATA[ネスペ]]></category>
		<category><![CDATA[#トークン]]></category>
		<guid isPermaLink="false">https://ascend-beyond.com/?p=8802</guid>

					<description><![CDATA[目次 設問１（２）X社が運用・保守を行う機器からX社FWの方向に確立されるTCPコネクションだけを許可する（２）クライアント証明書を配布してクライアント認証を行う設問２（１）TCPの送信処理中に、デバイスの電源断などでT [&#8230;]]]></description>
										<content:encoded><![CDATA[

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">設問１</a><ol><li><a href="#toc2" tabindex="0">（２）X社が運用・保守を行う機器からX社FWの方向に確立されるTCPコネクションだけを許可する</a></li><li><a href="#toc3" tabindex="0">（２）クライアント証明書を配布してクライアント認証を行う</a></li></ol></li><li><a href="#toc4" tabindex="0">設問２</a><ol><li><a href="#toc5" tabindex="0">（１）TCPの送信処理中に、デバイスの電源断などでTCPコネクションが解放された場合</a><ol><li><a href="#toc6" tabindex="0">Q.L4部分は正常だがL7の部分で不整合が~のような回答は正解なの？</a></li></ol></li><li><a href="#toc7" tabindex="0">（３）オ：SUBSCRIBE　カ：config/Di　キ：デバイスDi　ク：交換サーバ　ケ：業務サーバ</a></li></ol></li><li><a href="#toc8" tabindex="0">設問３</a><ol><li><a href="#toc9" tabindex="0">（２）10</a></li><li><a href="#toc10" tabindex="0">（３）WebAPのURIを固定にし、絶対URIを事前に通知してもらう</a></li></ol></li><li><a href="#toc11" tabindex="0">p.3 Q.MQTTって何</a></li><li><a href="#toc12" tabindex="0">p.3 Q.APIって何？</a></li><li><a href="#toc13" tabindex="0">p.4 Q.PUBRELとPUBCOMPって何？</a></li><li><a href="#toc14" tabindex="0">p.8 Q.RTTの２倍に等しいってどういうこと？</a></li><li><a href="#toc15" tabindex="0">Q.トークンってそもそも何？</a><ol><li><a href="#toc16" tabindex="0">① Opaque Token（参照トークン）</a></li><li><a href="#toc17" tabindex="0">② JWT（JSON Web Token）</a></li></ol></li><li><a href="#toc18" tabindex="0">Q.URLとURIの違いって何？</a></li><li><a href="#toc19" tabindex="0">Q.URIと情報取得までのフロー</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">設問１</span></h2>



<h3 class="wp-block-heading"><span id="toc2">（２）X社が運用・保守を行う機器からX社FWの方向に確立されるTCPコネクションだけを許可する</span></h3>



<figure class="wp-block-image size-full is-resized"><img fetchpriority="high" decoding="async" width="857" height="288" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-83.png" alt="" class="wp-image-8810" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-83.png 857w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-83-300x101.png 300w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-83-768x258.png 768w" sizes="(max-width: 857px) 100vw, 857px" /></figure>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="889" height="449" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-82.jpg" alt="" class="wp-image-8809" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-82.jpg 889w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-82-300x152.png 300w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-82-766x387.png 766w" sizes="(max-width: 889px) 100vw, 889px" /></figure>



<p class="wp-block-paragraph">前提：<br>　・TCPコネクション確立要求は、工場からX社の方向に行われる<br>　（＝インターネット側からのSYN要求は来ない）</p>



<p class="wp-block-paragraph">以上の前提より、「<span class="bold-blue">X社が運用・保守を行う機器からX社FWの方向に確立されるTCPコネクションだけを許可する</span>」こと以外に許可をする通信はないことが分かる。</p>



<h3 class="wp-block-heading"><span id="toc3">（２）クライアント証明書を配布してクライアント認証を行う</span></h3>



<figure class="wp-block-image size-full is-resized"><img fetchpriority="high" decoding="async" width="857" height="288" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-83.png" alt="" class="wp-image-8810" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-83.png 857w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-83-300x101.png 300w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-83-768x258.png 768w" sizes="(max-width: 857px) 100vw, 857px" /></figure>



<p class="wp-block-paragraph">前提：<br>　TLSでは以下のフローのように双方の正当性を確認できる👇</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" width="551" height="1024" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-84-551x1024.png" alt="" class="wp-image-8811" style="width:300px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-84-551x1024.png 551w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-84-161x300.png 161w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-84.png 633w" sizes="(max-width: 551px) 100vw, 551px" /></figure>



<p class="wp-block-paragraph">上図より、<span class="bold-blue">クライアント証明書を配布してクライアント認証を行う</span>ことでなりすましを防ぐことができる。<br>また、クライアント証明書のCNには各デバイスのデバイス名(CN=Device-1)を割り当てることで個々のデバイスを識別できるようになっている。</p>



<h2 class="wp-block-heading"><span id="toc4">設問２</span></h2>



<h3 class="wp-block-heading"><span id="toc5">（１）TCPの送信処理中に、デバイスの電源断などでTCPコネクションが解放された場合</span></h3>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="878" height="143" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-86.png" alt="" class="wp-image-8813" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-86.png 878w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-86-300x49.png 300w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-86-767x125.png 767w" sizes="(max-width: 878px) 100vw, 878px" /></figure>



<p class="wp-block-paragraph">TCPの再送制御が「無力化してメッセージが消えてしまう（＝消失を防げない）」最大の原因は、「<span class="bold-blue">通信の土台（TCPコネクション）自体が消滅してしまうこと</span>」。<br>具体的なシナリオで考えてみよう。</p>



<ol start="1" class="wp-block-list">
<li>QoS 0 なので、MQTT層の確認（PUBACKやPUBRECなど）はない。「投げっぱなし」。</li>



<li>アプリが「このデータを送るぞ」と指示を出し、OSのTCPバッファにデータが入って送り出そうとした瞬間、または送信途中に、<strong>工場のデバイスの電源がプツッと落ちた</strong>とする。</li>



<li>電源が落ちた瞬間、OSは終了するため、当然TCPコネクションは強制的に破棄（解放）される。<br>電源が落ちる＝メモリが完全リセットされ、<strong>TCPセッションの記憶が1バイト残らず消滅</strong>＝再起動ができても古いセッションを再開させることはできない。</li>



<li>TCPコネクションが消滅してしまったら、TCP層の再送機能（「さっきのパケットのACKが返ってこないからもう一回送るぞ」という制御）は、<strong>もう送るべき宛先もセッションも存在しないため、一切機能しない。</strong></li>



<li>結果として、バッファに残っていたデータや送信中のメッセージは完全に消失する。</li>
</ol>



<p class="wp-block-paragraph">これが、問題文にある「<span class="bold-blue">TCPの送信処理中に、デバイスの電源断などでTCPコネクションが解放された場合</span>」という現象の正体。</p>



<h4 class="wp-block-heading"><span id="toc6">Q.L4部分は正常だがL7の部分で不整合が~のような回答は正解なの？</span></h4>



<p class="wp-block-paragraph">よくある回答として、「パケットのL4部分は正常だがL7の部分で破損が生じた場合」という回答がある。一見、正しそうだが本問題においては趣旨がずれた回答になる。<br>ここで問われているのは、「アプリケーションのロジックや不整合」ではなく、「<strong>TCPというプロトコルが持っている『再送機能』の限界・弱点が露呈するのは、物理的にどういうシチュエーションか</strong>」という点。<br> もし「L4部分は正常だがL7の部分で不整合が…」などと答えてしまうと、肝心のTCPのメカニズム（コネクションと再送制御の関係）に話が及んでいないため、試験の模範解答のキーワードから外れてしまう。</p>



<h3 class="wp-block-heading"><span id="toc7">（３）オ：SUBSCRIBE　カ：config/Di　キ：デバイスDi　ク：交換サーバ　ケ：業務サーバ</span></h3>



<figure class="wp-block-image size-full"><img decoding="async" width="915" height="308" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-87.png" alt="" class="wp-image-8815" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-87.png 915w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-87-300x101.png 300w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-87-766x258.png 766w" sizes="(max-width: 915px) 100vw, 915px" /></figure>



<p class="wp-block-paragraph"><strong><span class="marker-red">オ：SUBSCRIBE</span><br></strong>　　本文中に「クライアントは、サーバにSUBSCRIBEを送信する」という部分があるので空欄オには<span class="bold-blue">SUBSCRIBE</span>が入る</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="600" height="101" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-88.png" alt="" class="wp-image-8816" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-88.png 600w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-88-300x51.png 300w" sizes="(max-width: 600px) 100vw, 600px" /></figure>



<p class="wp-block-paragraph"><strong><span class="marker-red">　カ：config/Di</span><br></strong>　項番１を見るとトピック名は<span class="bold-blue">config/Di</span>なので、そのまま抜粋する</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="621" height="306" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-89.png" alt="" class="wp-image-8817" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-89.png 621w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-89-300x148.png 300w" sizes="(max-width: 621px) 100vw, 621px" /></figure>



<p class="wp-block-paragraph"><strong><span class="marker-red">　キ：デバイスDi　ク：交換サーバ</span><br></strong>　PUBLISHが保存され、稼働再開後に再送されるということは配信元サーバ側であることが分かる。そのため空欄クには<span class="bold-blue">交換サーバ</span>が適切である。<br>　で、クが交換サーバであることが分かればそのペアである、<span class="bold-blue">デバイスDi</span>が空欄キに入ることが分かる。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="586" height="92" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-90.png" alt="" class="wp-image-8818" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-90.png 586w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-90-300x47.png 300w" sizes="(max-width: 586px) 100vw, 586px" /></figure>



<p class="wp-block-paragraph"><span class="marker-red"><strong>ケ：業務サーバ</strong></span><br>　図４中にある文をそのまま抜粋すればよい。そのため、<span class="bold-blue">業務サーバ</span>が入る。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="427" height="173" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-91.png" alt="" class="wp-image-8819" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-91.png 427w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-91-300x122.png 300w" sizes="(max-width: 427px) 100vw, 427px" /></figure>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="596" height="66" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-92.png" alt="" class="wp-image-8820" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-92.png 596w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-92-300x33.png 300w" sizes="(max-width: 596px) 100vw, 596px" /></figure>



<h2 class="wp-block-heading"><span id="toc8">設問３</span></h2>



<h3 class="wp-block-heading"><span id="toc9">（２）10</span></h3>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="794" height="134" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-96.png" alt="" class="wp-image-8824" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-96.png 794w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-96-300x51.png 300w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-96-764x129.png 764w" sizes="(max-width: 794px) 100vw, 794px" /></figure>



<p class="wp-block-paragraph"><strong><span class="marker-under-red"><span class="fz-20px">Q.そもそもアクセストークンとリフレッシュトークンの違いは？</span></span></strong></p>



<ul class="wp-block-list">
<li><strong>アクセストークン（Access Token）</strong>
<ul class="wp-block-list">
<li>役割: 業務サーバ（API）に直接アクセスしてデータを取得するための「一時的な入場パスポート」。</li>



<li>特徴: 有効期限はあえて短く（今回の問題では10分間）設定されている。APIにアクセスするたびに毎回これを提示する。</li>
</ul>
</li>



<li><strong>リフレッシュトークン（Refresh Token）</strong>
<ul class="wp-block-list">
<li>役割: アクセストークンが期限切れになったとき、新しいアクセストークンを再発行してもらうための「引き換え券（専用のパスポート）」。</li>



<li>特徴: 有効期限は長め（今回の問題では60分間）に設定されている。APIには直接アクセスできず、<span class="blue">認可サーバとの間でのみ</span>使われる。</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph"><strong>もし、リフレッシュトークンがないと&#8230;.<br></strong>アクセストークンが期限切れになるたびに認可サーバと認証のためのやり取りを要する必要が出てくる。<br><strong>一方、リフレッシュトークンがあれば</strong>&#8230;<br>その<span class="blue">フローをスキップして</span>リフレッシュトークンを提示すればアクセストークンがもらえるというわけである。</p>



<p class="wp-block-paragraph">以上のプロセスよりアクセストークンは10分おきに更新がかかるようになっている。そのため、設問の変更が反映されるタイミングは<span class="bold-blue">10分後</span>となる。</p>



<h3 class="wp-block-heading"><span id="toc10">（３）WebAPのURIを固定にし、絶対URIを事前に通知してもらう</span></h3>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="852" height="301" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-99.png" alt="" class="wp-image-8828" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-99.png 852w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-99-300x106.png 300w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-99-767x271.png 767w" sizes="(max-width: 852px) 100vw, 852px" /></figure>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="822" height="126" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-101.png" alt="" class="wp-image-8830" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-101.png 822w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-101-300x46.png 300w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-101-763x117.png 763w" sizes="(max-width: 822px) 100vw, 822px" /></figure>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="754" height="52" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-100.png" alt="" class="wp-image-8829" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-100.png 754w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-100-300x21.png 300w" sizes="(max-width: 754px) 100vw, 754px" /></figure>



<p class="wp-block-paragraph">前提整理：<br>　<strong><span class="marker-under-red">Q.認可要求のredirect_uriが書き換えられたらどうなる&#8230;?</span></strong><br>　→本来は顧客サーバ(WebAP)に届くはずのトークンが攻撃者サーバに渡ってしまい<span class="blue">なりすましが発生</span>する<br>　<strong><span class="marker-under-red">Q.HTTPリクエストに含まれるURIって何？</span></strong><br>　→認可要求に含まれるredirect_uriのこと。このredirect_uriにはWebAP(顧客サーバ)で待ち受けているuriを指定する<br>　<strong><span class="marker-under-red">Q.あらかじめ登録されている絶対URIって何？</span></strong><br>　→認可サーバ側（X社）に、<strong>「この顧客（WebAP）の正規の返却先はあらかじめこのURLです」と事前登録してあるデータ</strong>のこと。<br>　<strong><span class="marker-under-red">Q.なんでHTTPリクエスト内のURIと事前準備の絶対URIの２つが必要なの？</span></strong><br>　→１人のクライアントが複数のAPIを呼び出す可能性があるから。</p>



<p class="wp-block-paragraph">以上の前提より回答は「<span class="bold-blue">WebAPのURIを固定にし、絶対URIを事前に通知してもらう</span>」となる。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc11">p.3 Q.MQTTって何</span></h2>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="820" height="131" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-78.png" alt="" class="wp-image-8805" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-78.png 820w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-78-300x48.png 300w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-78-764x122.png 764w" sizes="(max-width: 820px) 100vw, 820px" /></figure>



<p class="wp-block-paragraph"><span class="bold-blue">MQTT</span>(Message Queuing Telemetry Transport)とは、IoTなどでよく使われる軽量な<span class="blue">メッセージ通信プロトコル</span>。<br>簡単に言うと、デバイス同士が直接通信するのではなく、間にMQTT Brokerという<span class="blue">中継サーバー</span>を設けて通信する仕組み。<br>各デバイスはそれぞれBrokerにTCP接続しておけばよく、<span class="blue">デバイス同士で個別にセッションを確立する必要がない。</span><br>そして、情報を送る側はBrokerにPublish（送信）し、情報を受け取る側は必要なTopicをSubscribe（購読）しておくことで、Broker経由で情報を受信できる。<br>そのため、デバイス同士の接続関係をシンプルにでき、複数のデバイスへの情報配信や通信管理が容易になる。<br>また、メッセージを保持する機能などもあるため、IoTのような通信環境でも使いやすいプロトコル。</p>



<h2 class="wp-block-heading"><span id="toc12">p.3 Q.APIって何？</span></h2>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="890" height="472" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-81.jpg" alt="" class="wp-image-8808" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-81.jpg 890w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-81-300x159.png 300w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-81-767x407.png 767w" sizes="(max-width: 890px) 100vw, 890px" /></figure>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="929" height="406" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-80.png" alt="" class="wp-image-8807" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-80.png 929w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-80-300x131.png 300w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-80-767x335.png 767w" sizes="(max-width: 929px) 100vw, 929px" /></figure>



<p class="wp-block-paragraph">API(ApplicationProgrammingInterface)とは、あるアプリケーションやシステムが持っている機能を、外部の別のプログラムから利用するための窓口・ルール。</p>



<p class="wp-block-paragraph">具体的なシナリオ<br><strong>１．LINEがメッセージ送信用のAPI用のURLを公開する<br>２．企業Aは自社プログラム内に当該APIのURLを埋め込む<br>３．条件を契機にURLを呼び出す<br></strong>　URLだけでなく、通常はHTTPの「POST」という方式を使い、中身（ボディやヘッダー）に以下の情報を詰め込んで送る。<br>　<span class="blue">アクセストークン:</span> 「うちは正当な権限を持った企業Aです」というパスワード（証明書）<br>　<span class="blue">宛先:</span> 誰に送るか（ユーザーIDなど）<br>　<span class="blue">メッセージ内容: </span>「こんにちは！」などの文章<br><strong>４. LINE側のサーバが「認証・認可」を行う</strong><br>　・何が起きるか: LINEのサーバがそのリクエストを受け取った瞬間、一番最初にやるのが「このリクエストは本当に許可されたアプリからのものか？」のチェック。<br><strong>　</strong>・チェック内容: 一緒に送られてきたアクセストークンを見て、「お、このトークンは企業Aのものだな。有効期限も切れてないな」と確認。ここで不正なトークンであれば、即座にエラー（401 Unauthorizedなど）を返して弾く。<br><strong>５. LINE側のサーバがメッセージを処理してプッシュ送信する</strong><br>　・何が起きるか: 認証が無事に通ると、LINEのサーバは受け取ったメッセージの中身を読み解く。<br>　・実際の動作: 「なるほど、ユーザーBさんにこの文章を送ればいいんだな」と理解したLINEのサーバは、自社のインフラを使って、対象のユーザーのスマホアプリに向けてメッセージをピコーンとプッシュ通知（配信）。<br><strong>６. 自社プログラムが「成功したよ」というレスポンスを受け取る</strong><br>　・何が起きるか: メッセージの送信処理が終わると、LINEのサーバは自社プログラムに対して「ちゃんと送れたよ！（HTTP 200 OK）」という返事（レスポンスデータ）を返す。<br>　・完了: 自社プログラム側でその「成功」の返事を受け取った時点で、一連の自動送信処理が完了。</p>



<h2 class="wp-block-heading"><span id="toc13">p.4 Q.PUBRELとPUBCOMPって何？</span></h2>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="437" height="70" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-85.png" alt="" class="wp-image-8812" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-85.png 437w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-85-300x48.png 300w" sizes="(max-width: 437px) 100vw, 437px" /></figure>



<p class="wp-block-paragraph"><span class="bold-blue">PUBRELのメッセージのリリース通知</span>とは「じゃあ、実際にそのメッセージの処理を実行していいよ！」と実行許可を出すメッセージ。<br><span class="bold-blue">PUBCOMPのメッセージ送信終了の通知</span>とは、「PUBRELをうけとったから正式に処理を完了したよ！これでこの通信セッションは完全に終わり！」というメッセージ。<br></p>



<ol start="1" class="wp-block-list">
<li><strong>PUBLISH（送信側 ➡️ 受信側）</strong>
<ul class="wp-block-list">
<li>「このメッセージを送るね！」（データ本体を渡す）</li>
</ul>
</li>



<li><strong>PUBREC（受信側 ➡️ 送信側）</strong>
<ul class="wp-block-list">
<li><strong>「メッセージ受信の通知」:</strong> 「PUBLISHをちゃんと受け取ったよ！」（これで受信側はデータを一時保存する）</li>
</ul>
</li>



<li><strong>PUBREL（送信側 ➡️ 受信側）</strong>
<ul class="wp-block-list">
<li><strong>「メッセージリリースの通知」:</strong> 「受け取りを確認した！じゃあそのメッセージを<strong>正式に確定（リリース）して処理してくれ！</strong>」というゴーサイン。</li>
</ul>
</li>



<li><strong>PUBCOMP（受信側 ➡️ 送信側）</strong>
<ul class="wp-block-list">
<li><strong>「メッセージ送信終了の通知」:</strong> 「了解、正式に処理を完了したよ！これでこの通信セッションは完全に終わり！」という最終確認。</li>
</ul>
</li>
</ol>



<h2 class="wp-block-heading"><span id="toc14">p.8 Q.RTTの２倍に等しいってどういうこと？</span></h2>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="883" height="908" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-93.jpg" alt="" class="wp-image-8821" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-93.jpg 883w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-93-292x300.png 292w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-93-767x789.png 767w" sizes="(max-width: 883px) 100vw, 883px" /></figure>



<p class="wp-block-paragraph">前提：<br>　・図５はQoSレベル2を説明した図<br>　・QoSレベル２は<strong>PUBLISH</strong>、<strong>PUBREC</strong>、<strong>PUBREL</strong>、<strong>PUBCOMP</strong>の４メッセージからなる。<br>　（１つの処理に４メッセージ＝2往復かかる）</p>



<p class="wp-block-paragraph">以上の前提より、１つのメッセージでは2往復を要するため、<span class="bold-blue">RTTの２倍に等しい</span>という結論が出る。</p>



<h2 class="wp-block-heading"><span id="toc15">Q.トークンってそもそも何？</span></h2>



<p class="wp-block-paragraph"><span class="bold-blue">トークン</span>とは、<span class="blue">認証</span>や<span class="blue">認可</span>のために使われるデータで、ユーザーやクライアントの<span class="blue">識別、認証状態、アクセス権限</span>などを確認するためのもの。<br>基本的にはただの「文字列（英数字や記号の羅列）」だけど、その中身の持ち方によって大きく2つのタイプ（<span class="bold-blue">OpaqueToken</span>と<span class="bold-blue">JWT</span>）に分かれている。<br>それらを見ていこう！</p>



<h3 class="wp-block-heading"><span id="toc16">① Opaque Token（参照トークン）</span></h3>



<p class="wp-block-paragraph"><span class="bold-blue">OpaqueToken</span>とは抽選番号のような<span class="blue">ランダムな文字列</span>（例：<code>a8f92bc7d1e4...</code>）をトークンとして扱う方式。このトークン自体には意味は含まれていない。</p>



<p class="wp-block-paragraph"><strong>👇フロー</strong></p>



<p class="wp-block-paragraph">１．認可サーバがトークンを発行してユーザに渡す<br>２．ユーザが<span class="bold-blue">authorizationヘッダー</span>にトークンをつけてWebAPIにアクセスする　<br>３．業務サーバはこれを受け取ると「これ有効？」と<span class="blue">認可サーバに裏で問い合わせ</span>に行く。<br>４．認可サーバが当該トークンを内部情報と参照して以下👇の有効性を返す。</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#34362e;color:#efefe1">Hjson</span><span role="button" tabindex="0" data-code="{
  &quot;active&quot;: true,
  &quot;sub&quot;: &quot;user123&quot;,
  &quot;scope&quot;: &quot;account:read profile:read&quot;,
  &quot;exp&quot;: 1790000000
}

active：トークンが有効かどうか
sub：誰に紐づくトークンなのか
scope：どのような操作を許可されているか
exp：いつ有効期限が切れるか" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki monokai" style="background-color: #272822" tabindex="0"><code><span class="line"><span style="color: #F8F8F2">{</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #66D9EF; font-style: italic">&quot;active&quot;</span><span style="color: #F8F8F2">: </span><span style="color: #AE81FF">true</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #66D9EF; font-style: italic">&quot;sub&quot;</span><span style="color: #F8F8F2">: </span><span style="color: #E6DB74">&quot;user123&quot;</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #66D9EF; font-style: italic">&quot;scope&quot;</span><span style="color: #F8F8F2">: </span><span style="color: #E6DB74">&quot;account:read profile:read&quot;</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #66D9EF; font-style: italic">&quot;exp&quot;</span><span style="color: #F8F8F2">: </span><span style="color: #AE81FF">1790000000</span></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E6DB74">active：トークンが有効かどうか</span></span>
<span class="line"><span style="color: #E6DB74">sub：誰に紐づくトークンなのか</span></span>
<span class="line"><span style="color: #E6DB74">scope：どのような操作を許可されているか</span></span>
<span class="line"><span style="color: #E6DB74">exp：いつ有効期限が切れるか</span></span></code></pre></div>



<p class="wp-block-paragraph">５．認可サーバの情報と以下を比較して、許可できると判断したらAPIの処理を実行する。<br>　・トークンは有効か？<br>　・有効期限は切れていないか？<br>　・要求された操作に必要な権限があるか？<br>　・必要なら、そのユーザーが対象リソースにアクセスできるか？<br>→正当性が確認できたら当該処理を許可する</p>



<h3 class="wp-block-heading"><span id="toc17">② JWT（JSON Web Token）</span></h3>



<p class="wp-block-paragraph">文字列の中に、「誰に対して」「どのAPIの権限（スコープ）を許可して」「いつまで有効か」という情報（JSONデータ）が丸ごと詰め込まれているトークン。</p>



<p class="wp-block-paragraph"><strong>👇JWTの構成</strong></p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#34362e;color:#efefe1">Hjson</span><span role="button" tabindex="0" data-code="#JWTはHeader.Payload.Signatureの３部分から構成されている

#Header
{
  &quot;alg&quot;: &quot;RS256&quot;,
  &quot;typ&quot;: &quot;JWT&quot;
}

#Payload
{
  &quot;sub&quot;: &quot;user123&quot;,
  &quot;scope&quot;: &quot;read write&quot;,
  &quot;exp&quot;: 1790000000
}

#Signature
x7Kp...（署名データ）" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki monokai" style="background-color: #272822" tabindex="0"><code><span class="line"><span style="color: #88846F">#JWTはHeader.Payload.Signatureの３部分から構成されている</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88846F">#Header</span></span>
<span class="line"><span style="color: #F8F8F2">{</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #66D9EF; font-style: italic">&quot;alg&quot;</span><span style="color: #F8F8F2">: </span><span style="color: #E6DB74">&quot;RS256&quot;</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #66D9EF; font-style: italic">&quot;typ&quot;</span><span style="color: #F8F8F2">: </span><span style="color: #E6DB74">&quot;JWT&quot;</span></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88846F">#Payload</span></span>
<span class="line"><span style="color: #F8F8F2">{</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #66D9EF; font-style: italic">&quot;sub&quot;</span><span style="color: #F8F8F2">: </span><span style="color: #E6DB74">&quot;user123&quot;</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #66D9EF; font-style: italic">&quot;scope&quot;</span><span style="color: #F8F8F2">: </span><span style="color: #E6DB74">&quot;read write&quot;</span><span style="color: #F8F8F2">,</span></span>
<span class="line"><span style="color: #F8F8F2">  </span><span style="color: #66D9EF; font-style: italic">&quot;exp&quot;</span><span style="color: #F8F8F2">: </span><span style="color: #AE81FF">1790000000</span></span>
<span class="line"><span style="color: #F8F8F2">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88846F">#Signature</span></span>
<span class="line"><span style="color: #E6DB74">x7Kp...（署名データ）</span></span></code></pre></div>



<p class="wp-block-paragraph"><strong>👇認証フロー</strong></p>



<p class="wp-block-paragraph">１．認可サーバがユーザにJWTを発行する<br>２．ユーザがJWTを<span class="bold-blue">authorization ヘッダー</span>につけてAPIへアクセスする<br>３．API側がJWTを検証する<br>　①認可サーバの公開鍵でSignature内の署名データを復号<br>　②API側でもJWTのハッシュを作成する<br>　③<span class="fz-16px">①</span>と<span class="fz-16px">②</span>の値が一致したら正当なトークンであると判断<br>４．トークン内のPayloadと現在アクセスしているユーザ・ユーザの操作等を比較し正当性を判断<br>　→正当であれば当該処理を許可する</p>



<h2 class="wp-block-heading"><span id="toc18">Q.URLとURIの違いって何？</span></h2>



<ul class="wp-block-list">
<li><strong>URI（Uniform Resource Identifier / 統一資源識別子）</strong>
<ul class="wp-block-list">
<li>「ネット上のあらゆるリソース（場所、名前、データなど）を特定・識別するための住所（識別子）の総称」。</li>



<li>「ここにあるよ」と指し示すもの全てがURIに含まれる。</li>
</ul>
</li>



<li><strong>URL（Uniform Resource Locator / 統一資源位置子）</strong>
<ul class="wp-block-list">
<li>「そのリソースがネット上のどこに『あるか（場所・アクセス方法）』を示すもの」。</li>



<li><code><a rel="noopener" href="https://example.com/api" title="Example Domain" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fexample.com%2Fapi?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Example Domain</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://example.com/api" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">example.com</div></div></div></div></a>(https://example.com/api)</code> のように、プロトコル（https://）やドメイン名を使って「実際の場所」まで具体的に指し示すものはすべてURLになる。</li>
</ul>
</li>
</ul>



<p class="wp-block-paragraph">つまり、世の中にあるすべてのURLは、URIの一種（部分集合）。「すべてのURLはURIだけど、すべてのURIがURLというわけではない」という関係になっている。 （※ちなみに、場所ではなく「名前」で識別する「URN」というものもあるが、ITの世界ではほぼURLの形をとるため、まとめて「URI」と呼ぶことが多い）</p>



<h2 class="wp-block-heading"><span id="toc19">Q.URIと情報取得までのフロー</span></h2>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="936" height="456" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-103.png" alt="" class="wp-image-8833" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-103.png 936w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-103-300x146.png 300w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-103-768x374.png 768w" sizes="(max-width: 936px) 100vw, 936px" /></figure>



<p class="wp-block-paragraph">疑問点：<br>　client-idはいつ指定されるの？<br>　client-idはユーザに個別ではなくWebAPのclient-idってこと？　<br>　顧客サーバ配下のユーザごとの認証はするの？一度WebAPが認可コード得たら他のユーザでも使えちゃうのでは？</p>



<p class="wp-block-paragraph"><strong><span class="fz-20px"><span class="marker-under">１．情報要求<br></span></span></strong>　①ブラウザ上の画面で「この機器の情報がほしい！」とボタン等をクリックすると、ブラウザの裏側では以下のような HTTPリクエスト（基本はGETメソッドなど） が顧客サーバ（WebAP）に向けて飛ぶ。<br>　②ブラウザは、そのボタンに紐づいたパス（例: <code>GET /devices/info-01 HTTP/1.1</code>）を含んだリクエストを、顧客サーバのFQDN宛てに送信する。</p>



<p class="wp-block-paragraph"><strong><span class="marker-under">２．リダイレクト応答<br></span></strong>　①authorizationヘッダに認証情報が付与されていない場合に、認証情報が付与されていないと判断。<br>　②顧客サーバ（WebAP）は、<span class="bold-blue"><code>302 Found</code> </span>と一緒に <code><span class="bold-blue">Location</span></code> ヘッダに「次はこのURLに飛んでね」という宛先を書いてPCに返す</p>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#34362e;color:#efefe1">Hjson</span><span role="button" tabindex="0" data-code="HTTP/1.1 302 Found
Date: Thu, 12 Nov 2026 07:44:00 GMT
Content-Type: text/html; charset=UTF-8
Location: https://auth.example.com/authorize?response_type=code&amp;client_id=customer_ap_001&amp;redirect_uri=https://app.customer-company.com/oauth/callback
Content-Length: 0

#Q.リダイレクト先だけ言われても、PCは一体どんな情報を自分で考えて流せばいいのか困っちゃうんじゃないの？
#A.PCが自分で情報を考えて付け足す必要は一切ない。なぜなら、先ほどの Location ヘッダーに書かれているURLには、「次に持って行くべき荷物（パラメータ）が最初から全部セットで書き込まれているから。
#response_type=code （認可コードをちょうだいという指定）
#client_id=customer_ap_001 （私はこのWebAPシステムですという身分証）
#redirect_uri=https://... （終わったらここに返してねという宛先）" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki monokai" style="background-color: #272822" tabindex="0"><code><span class="line"><span style="color: #E6DB74">HTTP/1.1 302 Found</span></span>
<span class="line"><span style="color: #E6DB74">Date: Thu, 12 Nov 2026 07:44:00 GMT</span></span>
<span class="line"><span style="color: #E6DB74">Content-Type: text/html; charset=UTF-8</span></span>
<span class="line"><span style="color: #E6DB74">Location: https://auth.example.com/authorize?response_type=code&amp;client_id=customer_ap_001&amp;redirect_uri=https://app.customer-company.com/oauth/callback</span></span>
<span class="line"><span style="color: #E6DB74">Content-Length: 0</span></span>
<span class="line"></span>
<span class="line"><span style="color: #88846F">#Q.リダイレクト先だけ言われても、PCは一体どんな情報を自分で考えて流せばいいのか困っちゃうんじゃないの？</span></span>
<span class="line"><span style="color: #88846F">#A.PCが自分で情報を考えて付け足す必要は一切ない。なぜなら、先ほどの Location ヘッダーに書かれているURLには、「次に持って行くべき荷物（パラメータ）が最初から全部セットで書き込まれているから。</span></span>
<span class="line"><span style="color: #88846F">#response_type=code （認可コードをちょうだいという指定）</span></span>
<span class="line"><span style="color: #88846F">#client_id=customer_ap_001 （私はこのWebAPシステムですという身分証）</span></span>
<span class="line"><span style="color: #88846F">#redirect_uri=https://... （終わったらここに返してねという宛先）</span></span></code></pre></div>



<p class="wp-block-paragraph"><strong><span class="marker-under"><span class="fz-20px">３．PCが認可サーバに認可要求</span><br></span></strong>　Locationヘッダーの情報からGETリクエストを送信する</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="815" height="50" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-102.png" alt="" class="wp-image-8832" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-102.png 815w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-102-300x18.png 300w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-102-766x47.png 766w" sizes="(max-width: 815px) 100vw, 815px" /></figure>



<div class="wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#34362e;color:#efefe1">Hjson</span><span role="button" tabindex="0" data-code="GET /authorize?response_type=code&amp;client_id=customer_ap_001&amp;redirect_uri=https://app.customer-company.com/oauth/callback HTTP/1.1
Host: auth.example.com" style="color:#F8F8F2;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki monokai" style="background-color: #272822" tabindex="0"><code><span class="line"><span style="color: #E6DB74">GET /authorize?response_type=code&amp;client_id=customer_ap_001&amp;redirect_uri=https://app.customer-company.com/oauth/callback HTTP/1.1</span></span>
<span class="line"><span style="color: #E6DB74">Host: auth.example.com</span></span></code></pre></div>



<p class="wp-block-paragraph"><strong><span class="marker-under"><span class="fz-20px">４．認可サーバ⇔PC間で認証を実施する</span></span></strong></p>



<p class="wp-block-paragraph"><span class="marker-under"><strong><span class="fz-20px">５．認可応答</span></strong><br></span>　PCのユーザ認証が成功したら、認可応答を返す</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="799" height="63" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-104.png" alt="" class="wp-image-8834" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-104.png 799w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-104-300x24.png 300w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-104-761x60.png 761w" sizes="(max-width: 799px) 100vw, 799px" /></figure>



<p class="wp-block-paragraph"><strong><span class="fz-20px"><span class="marker-under">６．PCからリダイレクト<br></span></span></strong>　認可応答のLocationヘッダーをもとにGETリクエストを作成して、redirect先に送信する</p>



<p class="wp-block-paragraph"><strong><span class="marker-under"><span class="fz-20px">７．トークン要求</span></span></strong><br>　WebAPが認可サーバへトークン要求を実施</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="827" height="98" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-105.png" alt="" class="wp-image-8835" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-105.png 827w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-105-300x36.png 300w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-105-768x91.png 768w" sizes="(max-width: 827px) 100vw, 827px" /></figure>



<p class="wp-block-paragraph"><strong><span class="fz-20px"><span class="marker-under">８．トークン応答<br></span></span></strong>　認可サーバは、認可コード等を確認しAPIの権限に正当性を確認できたらトークンを発行する。</p>



<figure class="wp-block-image size-full is-resized"><img decoding="async" width="845" height="98" src="https://ascend-beyond.com/wp-content/uploads/2026/11/image-107.png" alt="" class="wp-image-8837" style="width:500px;height:auto" srcset="https://ascend-beyond.com/wp-content/uploads/2026/11/image-107.png 845w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-107-300x35.png 300w, https://ascend-beyond.com/wp-content/uploads/2026/11/image-107-767x89.png 767w" sizes="(max-width: 845px) 100vw, 845px" /></figure>



<p class="wp-block-paragraph"><span class="fz-20px"><strong><span class="marker-under">９．アクセス要求<br></span></strong></span>　トークンを受け取ったらアクセス要求をする</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
