<?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>其他 on erpan&#39;s note</title>
    <link>https://940504.top/categories/%E5%85%B6%E4%BB%96/</link>
    <description>Recent content in 其他 on erpan&#39;s note</description>
    <image>
      <title>erpan&#39;s note</title>
      <url>https://940504.top/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</url>
      <link>https://940504.top/%3Clink%20or%20path%20of%20image%20for%20opengraph,%20twitter-cards%3E</link>
    </image>
    <generator>Hugo -- 0.154.5</generator>
    <language>en</language>
    <copyright>浙ICP备2021018236号-1</copyright>
    <lastBuildDate>Sat, 15 Jun 2024 18:52:06 +0800</lastBuildDate>
    <atom:link href="https://940504.top/categories/%E5%85%B6%E4%BB%96/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>OAuth 2.0 与 OpenID Connect</title>
      <link>https://940504.top/posts/oauth-2.0-%E4%B8%8E-openid-connect/</link>
      <pubDate>Sat, 15 Jun 2024 18:52:06 +0800</pubDate>
      <guid>https://940504.top/posts/oauth-2.0-%E4%B8%8E-openid-connect/</guid>
      <description>&lt;p&gt;在现代身份认证与授权体系中，OAuth 2.0 和 OpenID Connect（OIDC） 经常被一起提及，但它们解决的是不同层面的问题。理解两者的区别和协作关系，是构建安全、标准的身份系统的关键。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;是什么&#34;&gt;是什么？&lt;/h2&gt;
&lt;p&gt;OAuth 2.0 &lt;strong&gt;不是身份验证协议&lt;/strong&gt;，而是一个&lt;strong&gt;授权框架&lt;/strong&gt;，允许第三方应用在用户授权下访问受保护资源，而无需获取用户密码。&lt;/p&gt;
&lt;p&gt;OpenID Connect（OIDC）是一种基于OAuth 2.0协议构建的‌&lt;strong&gt;身份认证标准&lt;/strong&gt;‌，旨在为现代应用程序提供简单、安全且可互操作的用户身份验证方式。它通过在OAuth 2.0的授权框架之上添加一个身份层，解决了OAuth 2.0本身不完善的身份认证问题。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;重要区分&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;OAuth 2.0 = 授权&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenID Connect = 身份认证+授权&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;oauth20授权流程&#34;&gt;OAuth2.0授权流程&lt;/h2&gt;
&lt;p&gt;OAuth2 定义了好几种授权模式，有Authorization Code、Client Credentials、Device Code、Implicit Flow和Password Credentials，隐式流和密码凭据模式被认为是不安全的，不推荐使用。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;核心角色&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;角色&lt;/th&gt;
          &lt;th style=&#34;text-align: left&#34;&gt;描述&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Resource Owner（资源所有者）&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;通常是用户自己&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Client（客户端）&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;请求访问用户资源的应用（Web、移动、单页应用SPA 等）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Authorization Server（授权服务器）&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;颁发令牌（如 Casdoor、Keycloak、Google OAuth）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;Resource Server（资源服务器）&lt;/td&gt;
          &lt;td style=&#34;text-align: left&#34;&gt;托管用户数据（如 API 服务），接受并验证访问令牌，以确定请求是否合法&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;授权码模式authorization-code-flow&#34;&gt;授权码模式（Authorization Code Flow）&lt;/h3&gt;
&lt;p&gt;适用于：服务器端 Web 应用、移动 App、单页应用SPA(&lt;strong&gt;配合 PKCE 使用&lt;/strong&gt;)&lt;/p&gt;
&lt;pre class=&#34;mermaid&#34;&gt;
    sequenceDiagram
    participant User as 用户
    participant Client as 客户端
    participant AS as 授权服务器
    participant RS as 资源服务器

    User-&amp;gt;&amp;gt;Client: 访问应用
    Client--&amp;gt;&amp;gt;User: 重定向至授权服务器&amp;lt;br&amp;gt;(client_id, redirect_uri, scope, state, code_challenge)
    User-&amp;gt;&amp;gt;AS: 登录并同意授权
    AS--&amp;gt;&amp;gt;User: 重定向回客户端&amp;lt;br&amp;gt;(?code=xxx&amp;amp;state=yyy)
    User-&amp;gt;&amp;gt;Client: 浏览器携带授权码
    Client-&amp;gt;&amp;gt;AS: POST /token&amp;lt;br&amp;gt;(code, client_id, client_secret*, code_verifier)
    AS--&amp;gt;&amp;gt;Client: 返回 access_token (+ refresh_token)
    Client-&amp;gt;&amp;gt;RS: GET /api/data&amp;lt;br&amp;gt;Authorization: Bearer &amp;lt;access_token&amp;gt;
    RS--&amp;gt;&amp;gt;Client: 返回受保护资源
&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;流程&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>vim 常用操作及配置</title>
      <link>https://940504.top/posts/vim%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C%E5%8F%8A%E9%85%8D%E7%BD%AE/</link>
      <pubDate>Thu, 20 Jun 2019 17:11:52 +0800</pubDate>
      <guid>https://940504.top/posts/vim%E5%B8%B8%E7%94%A8%E6%93%8D%E4%BD%9C%E5%8F%8A%E9%85%8D%E7%BD%AE/</guid>
      <description>&lt;p&gt;vim常用操作汇总&lt;/p&gt;
&lt;h3 id=&#34;光标移动&#34;&gt;光标移动&lt;/h3&gt;
&lt;p&gt;上下左右 k/j/h/l&lt;/p&gt;
&lt;p&gt;行首 0 或者 ^&lt;/p&gt;
&lt;p&gt;行尾 $&lt;/p&gt;
&lt;p&gt;单词和字符串间移动&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;指令&lt;/th&gt;
          &lt;th style=&#34;text-align: center&#34;&gt;动作&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;w/W&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;正向移动到下一个单词开头，大写的忽略特殊字符、符号等&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;b/B&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;和w相对应的反向移动，移动到上一个单词开头&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;e/E&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;正向移动到下一个单词结尾&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;ge&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;反向移动&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;{num+} f/F+空格&lt;/td&gt;
          &lt;td style=&#34;text-align: center&#34;&gt;正向/反向移动到本行空格的地方，num相当于移动几次&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img alt=&#34;move_inline&#34; loading=&#34;lazy&#34; src=&#34;https://940504-1306126584.cos.ap-shanghai.myqcloud.com//940504/posts/move_inline.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;跳转&#34;&gt;跳转&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;指令&lt;/th&gt;
          &lt;th&gt;动作&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;ctrl+f&lt;/td&gt;
          &lt;td&gt;向下翻页&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;ctrl+b&lt;/td&gt;
          &lt;td&gt;向上翻页&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;ctrl+d/u&lt;/td&gt;
          &lt;td&gt;向下/向上翻半页&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;gg&lt;/td&gt;
          &lt;td&gt;文件行首&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;G&lt;/td&gt;
          &lt;td&gt;最后一行&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;行号+gg/G&lt;/td&gt;
          &lt;td&gt;都是跳到指定行号的行&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;g+ctrl+g/G&lt;/td&gt;
          &lt;td&gt;查看光标位置，输出包含行、列、词、字节位置&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;缩进操作符&#34;&gt;缩进操作符&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;指令&lt;/th&gt;
          &lt;th&gt;动作&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&amp;raquo; 和 &amp;laquo; 或者 :&amp;gt; 和 :&amp;lt;&lt;/td&gt;
          &lt;td&gt;当前行右缩进和左缩进，后者命令行模式&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;:line_num1,line_num1+x&amp;gt; 或者 :line_num&amp;gt;x&lt;/td&gt;
          &lt;td&gt;命令行模式，批量缩进，缩进x行&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;复制粘贴&#34;&gt;复制粘贴&lt;/h3&gt;
&lt;p&gt;复制剪贴内容存于寄存器， &lt;code&gt;:reg&lt;/code&gt;可以查看寄存器内容&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;指令&lt;/th&gt;
          &lt;th&gt;动作&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;yy / 8yy&lt;/td&gt;
          &lt;td&gt;复制/8行&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;dd / 8dd&lt;/td&gt;
          &lt;td&gt;剪贴/8行&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;p/P&lt;/td&gt;
          &lt;td&gt;粘贴到光标前/后&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;u&lt;/td&gt;
          &lt;td&gt;撤销&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;ctrl+r&lt;/td&gt;
          &lt;td&gt;重做&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;yw&lt;/td&gt;
          &lt;td&gt;复制当前光标单词&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;y8w / y8W&lt;/td&gt;
          &lt;td&gt;复制含当前光标的正向8个单词，大写W的含义和W移动含义相同（忽略一些符号）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;x/4x/X&lt;/td&gt;
          &lt;td&gt;剪贴单个字符/4个字符，大写就是反向&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;d{w/h/j/k/l}&lt;/td&gt;
          &lt;td&gt;可以各种组合&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;d$/D&lt;/td&gt;
          &lt;td&gt;删除光标到行尾&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;d^&lt;/td&gt;
          &lt;td&gt;删除光标到行首&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;插入查找替换&#34;&gt;插入、查找、替换&lt;/h3&gt;
&lt;h4 id=&#34;插入&#34;&gt;插入&lt;/h4&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;指令&lt;/th&gt;
          &lt;th&gt;动作&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;I/A i/a&lt;/td&gt;
          &lt;td&gt;行首、行尾插入，向前向后插入&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;o/O&lt;/td&gt;
          &lt;td&gt;下一行、上一行插入&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;num + (i/I/A/a/o/O)&lt;/td&gt;
          &lt;td&gt;多次插入，即重复插入多个字符或者多行&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id=&#34;转换&#34;&gt;转换&lt;/h4&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;指令&lt;/th&gt;
          &lt;th&gt;动作&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;~&lt;/td&gt;
          &lt;td&gt;单个字符大小写转换&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;g~w&lt;/td&gt;
          &lt;td&gt;单词大小写反转&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;g~$ 或 g~~&lt;/td&gt;
          &lt;td&gt;整行大小写反转&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;gU或gu + 回车&lt;/td&gt;
          &lt;td&gt;整行转大写或小写&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;gU/uw&lt;/td&gt;
          &lt;td&gt;单词转大写或小写，转换光标到词尾的部分&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;&amp;rsquo;.&amp;rsquo;：点操作符表示重复上一次操作&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
