This commit is contained in:
Firstyear 2022-06-14 23:21:04 +00:00
parent 4cae8bceac
commit e62544ab1c
90 changed files with 940 additions and 104 deletions

View file

@ -353,7 +353,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
</main>

View file

@ -1613,7 +1613,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
<div style="break-before: page; page-break-before: always;"></div><h1 id="pam-and-nsswitch"><a class="header" href="#pam-and-nsswitch">PAM and nsswitch</a></h1>
<p><a href="http://linux-pam.org">PAM</a> and <a href="https://en.wikipedia.org/wiki/Name_Service_Switch">nsswitch</a>
are the core mechanisms used by Linux and BSD clients to resolve identities from an IDM service

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -353,7 +353,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
</main>

View file

@ -1613,7 +1613,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
<div style="break-before: page; page-break-before: always;"></div><h1 id="pam-and-nsswitch"><a class="header" href="#pam-and-nsswitch">PAM and nsswitch</a></h1>
<p><a href="http://linux-pam.org">PAM</a> and <a href="https://en.wikipedia.org/wiki/Name_Service_Switch">nsswitch</a>
are the core mechanisms used by Linux and BSD clients to resolve identities from an IDM service

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -353,7 +353,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
</main>

View file

@ -1613,7 +1613,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
<div style="break-before: page; page-break-before: always;"></div><h1 id="pam-and-nsswitch"><a class="header" href="#pam-and-nsswitch">PAM and nsswitch</a></h1>
<p><a href="http://linux-pam.org">PAM</a> and <a href="https://en.wikipedia.org/wiki/Name_Service_Switch">nsswitch</a>
are the core mechanisms used by Linux and BSD clients to resolve identities from an IDM service

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -353,7 +353,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
</main>

View file

@ -1613,7 +1613,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
<div style="break-before: page; page-break-before: always;"></div><h1 id="pam-and-nsswitch"><a class="header" href="#pam-and-nsswitch">PAM and nsswitch</a></h1>
<p><a href="http://linux-pam.org">PAM</a> and <a href="https://en.wikipedia.org/wiki/Name_Service_Switch">nsswitch</a>
are the core mechanisms used by Linux and BSD clients to resolve identities from an IDM service

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -353,7 +353,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
</main>

View file

@ -1613,7 +1613,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
<div style="break-before: page; page-break-before: always;"></div><h1 id="pam-and-nsswitch"><a class="header" href="#pam-and-nsswitch">PAM and nsswitch</a></h1>
<p><a href="http://linux-pam.org">PAM</a> and <a href="https://en.wikipedia.org/wiki/Name_Service_Switch">nsswitch</a>
are the core mechanisms used by Linux and BSD clients to resolve identities from an IDM service

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -353,7 +353,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
</main>

View file

@ -1613,7 +1613,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
<div style="break-before: page; page-break-before: always;"></div><h1 id="pam-and-nsswitch"><a class="header" href="#pam-and-nsswitch">PAM and nsswitch</a></h1>
<p><a href="http://linux-pam.org">PAM</a> and <a href="https://en.wikipedia.org/wiki/Name_Service_Switch">nsswitch</a>
are the core mechanisms used by Linux and BSD clients to resolve identities from an IDM service

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -353,7 +353,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
</main>

View file

@ -1613,7 +1613,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
<div style="break-before: page; page-break-before: always;"></div><h1 id="pam-and-nsswitch"><a class="header" href="#pam-and-nsswitch">PAM and nsswitch</a></h1>
<p><a href="http://linux-pam.org">PAM</a> and <a href="https://en.wikipedia.org/wiki/Name_Service_Switch">nsswitch</a>
are the core mechanisms used by Linux and BSD clients to resolve identities from an IDM service

View file

@ -6,16 +6,16 @@
</a><h2 class="location"><a href="#">ClientError</a></h2><div class="sidebar-elems"><section><div class="block"><h3 class="sidebar-title"><a href="#variants">Variants</a></h3><ul><li><a href="#variant.AuthenticationFailed">AuthenticationFailed</a></li><li><a href="#variant.EmptyResponse">EmptyResponse</a></li><li><a href="#variant.Http">Http</a></li><li><a href="#variant.JsonDecode">JsonDecode</a></li><li><a href="#variant.JsonEncode">JsonEncode</a></li><li><a href="#variant.SystemError">SystemError</a></li><li><a href="#variant.TotpInvalidSha1">TotpInvalidSha1</a></li><li><a href="#variant.TotpVerifyFailed">TotpVerifyFailed</a></li><li><a href="#variant.Transport">Transport</a></li><li><a href="#variant.Unauthorized">Unauthorized</a></li></ul></div><div class="block"><h3 class="sidebar-title"><a href="#trait-implementations">Trait Implementations</a></h3><ul><li><a href="#impl-Debug">Debug</a></li></ul></div><div class="block"><h3 class="sidebar-title"><a href="#synthetic-implementations">Auto Trait Implementations</a></h3><ul><li><a href="#impl-RefUnwindSafe">!RefUnwindSafe</a></li><li><a href="#impl-Send">Send</a></li><li><a href="#impl-Sync">Sync</a></li><li><a href="#impl-Unpin">Unpin</a></li><li><a href="#impl-UnwindSafe">!UnwindSafe</a></li></ul></div><div class="block"><h3 class="sidebar-title"><a href="#blanket-implementations">Blanket Implementations</a></h3><ul><li><a href="#impl-Any">Any</a></li><li><a href="#impl-Borrow%3CT%3E">Borrow&lt;T&gt;</a></li><li><a href="#impl-BorrowMut%3CT%3E">BorrowMut&lt;T&gt;</a></li><li><a href="#impl-From%3CT%3E">From&lt;T&gt;</a></li><li><a href="#impl-Instrument">Instrument</a></li><li><a href="#impl-Into%3CU%3E">Into&lt;U&gt;</a></li><li><a href="#impl-TryFrom%3CU%3E">TryFrom&lt;U&gt;</a></li><li><a href="#impl-TryInto%3CU%3E">TryInto&lt;U&gt;</a></li><li><a href="#impl-VZip%3CV%3E">VZip&lt;V&gt;</a></li><li><a href="#impl-WithSubscriber">WithSubscriber</a></li></ul></div></section><h2 class="location"><a href="index.html">In kanidm_client</a></h2><div id="sidebar-vars" data-name="ClientError" data-ty="enum" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><main><div class="width-limiter"><div class="sub-container"><a class="sub-logo-container" href="../kanidm_client/index.html"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></a><nav class="sub"><div class="theme-picker hidden"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="22" height="22" alt="Pick another theme!" src="../brush.svg"></button><div id="theme-choices" role="menu"></div></div><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></form></nav></div><section id="main-content" class="content"><div class="main-heading">
<h1 class="fqn"><span class="in-band">Enum <a href="index.html">kanidm_client</a>::<wbr><a class="enum" href="#">ClientError</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></span></h1><span class="out-of-band"><a class="srclink" href="../src/kanidm_client/lib.rs.html#51-62">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span></div><div class="docblock item-decl"><pre class="rust enum"><code>pub enum ClientError {
Unauthorized,
Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="../kanidm_proto/v1/enum.OperationError.html" title="enum kanidm_proto::v1::OperationError">OperationError</a>&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>),
Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;OperationError&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>),
Transport(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>),
AuthenticationFailed,
EmptyResponse,
TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;<a class="struct" href="../kanidm_proto/v1/struct.TotpSecret.html" title="struct kanidm_proto::v1::TotpSecret">TotpSecret</a>),
TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;TotpSecret),
TotpInvalidSha1(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>),
JsonDecode(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>),
JsonEncode(<a class="struct" href="https://docs.rs/serde_json/1.0.81/serde_json/error/struct.Error.html" title="struct serde_json::error::Error">SerdeJsonError</a>),
SystemError,
}</code></pre></div><h2 id="variants" class="variants small-section-header">Variants<a href="#variants" class="anchor"></a></h2><h3 id="variant.Unauthorized" class="variant small-section-header"><a href="#variant.Unauthorized" class="anchor field"></a><code>Unauthorized</code></h3><h3 id="variant.Http" class="variant small-section-header"><a href="#variant.Http" class="anchor field"></a><code>Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="../kanidm_proto/v1/enum.OperationError.html" title="enum kanidm_proto::v1::OperationError">OperationError</a>&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.Transport" class="variant small-section-header"><a href="#variant.Transport" class="anchor field"></a><code>Transport(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>)</code></h3><h3 id="variant.AuthenticationFailed" class="variant small-section-header"><a href="#variant.AuthenticationFailed" class="anchor field"></a><code>AuthenticationFailed</code></h3><h3 id="variant.EmptyResponse" class="variant small-section-header"><a href="#variant.EmptyResponse" class="anchor field"></a><code>EmptyResponse</code></h3><h3 id="variant.TotpVerifyFailed" class="variant small-section-header"><a href="#variant.TotpVerifyFailed" class="anchor field"></a><code>TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;<a class="struct" href="../kanidm_proto/v1/struct.TotpSecret.html" title="struct kanidm_proto::v1::TotpSecret">TotpSecret</a>)</code></h3><h3 id="variant.TotpInvalidSha1" class="variant small-section-header"><a href="#variant.TotpInvalidSha1" class="anchor field"></a><code>TotpInvalidSha1(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>)</code></h3><h3 id="variant.JsonDecode" class="variant small-section-header"><a href="#variant.JsonDecode" class="anchor field"></a><code>JsonDecode(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.JsonEncode" class="variant small-section-header"><a href="#variant.JsonEncode" class="anchor field"></a><code>JsonEncode(<a class="struct" href="https://docs.rs/serde_json/1.0.81/serde_json/error/struct.Error.html" title="struct serde_json::error::Error">SerdeJsonError</a>)</code></h3><h3 id="variant.SystemError" class="variant small-section-header"><a href="#variant.SystemError" class="anchor field"></a><code>SystemError</code></h3><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor"></a></h2><div id="trait-implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Debug" class="impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#impl-Debug" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#method.fmt" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt" class="fnname">fmt</a>(&amp;self, f: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.61.0/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>&lt;'_&gt;) -&gt; <a class="type" href="https://doc.rust-lang.org/1.61.0/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></h4></section></summary><div class='docblock'><p>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt">Read more</a></p>
}</code></pre></div><h2 id="variants" class="variants small-section-header">Variants<a href="#variants" class="anchor"></a></h2><h3 id="variant.Unauthorized" class="variant small-section-header"><a href="#variant.Unauthorized" class="anchor field"></a><code>Unauthorized</code></h3><h3 id="variant.Http" class="variant small-section-header"><a href="#variant.Http" class="anchor field"></a><code>Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;OperationError&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.Transport" class="variant small-section-header"><a href="#variant.Transport" class="anchor field"></a><code>Transport(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>)</code></h3><h3 id="variant.AuthenticationFailed" class="variant small-section-header"><a href="#variant.AuthenticationFailed" class="anchor field"></a><code>AuthenticationFailed</code></h3><h3 id="variant.EmptyResponse" class="variant small-section-header"><a href="#variant.EmptyResponse" class="anchor field"></a><code>EmptyResponse</code></h3><h3 id="variant.TotpVerifyFailed" class="variant small-section-header"><a href="#variant.TotpVerifyFailed" class="anchor field"></a><code>TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;TotpSecret)</code></h3><h3 id="variant.TotpInvalidSha1" class="variant small-section-header"><a href="#variant.TotpInvalidSha1" class="anchor field"></a><code>TotpInvalidSha1(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>)</code></h3><h3 id="variant.JsonDecode" class="variant small-section-header"><a href="#variant.JsonDecode" class="anchor field"></a><code>JsonDecode(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.JsonEncode" class="variant small-section-header"><a href="#variant.JsonEncode" class="anchor field"></a><code>JsonEncode(<a class="struct" href="https://docs.rs/serde_json/1.0.81/serde_json/error/struct.Error.html" title="struct serde_json::error::Error">SerdeJsonError</a>)</code></h3><h3 id="variant.SystemError" class="variant small-section-header"><a href="#variant.SystemError" class="anchor field"></a><code>SystemError</code></h3><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor"></a></h2><div id="trait-implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Debug" class="impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#impl-Debug" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#method.fmt" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt" class="fnname">fmt</a>(&amp;self, f: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.61.0/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>&lt;'_&gt;) -&gt; <a class="type" href="https://doc.rust-lang.org/1.61.0/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></h4></section></summary><div class='docblock'><p>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt">Read more</a></p>
</div></details></div></details></div><h2 id="synthetic-implementations" class="small-section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor"></a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe" class="impl has-srclink"><a href="#impl-RefUnwindSafe" class="anchor"></a><h3 class="code-header in-band">impl !<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-Send" class="impl has-srclink"><a href="#impl-Send" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-Sync" class="impl has-srclink"><a href="#impl-Sync" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-Unpin" class="impl has-srclink"><a href="#impl-Unpin" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-UnwindSafe" class="impl has-srclink"><a href="#impl-UnwindSafe" class="anchor"></a><h3 class="code-header in-band">impl !<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section></div><h2 id="blanket-implementations" class="small-section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor"></a></h2><div id="blanket-implementations-list"><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Any" class="impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/any.rs.html#132-136">source</a></span><a href="#impl-Any" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/any/trait.Any.html" title="trait core::any::Any">Any</a> for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/any.rs.html#133">source</a></span><a href="#method.type_id" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/any/trait.Any.html#tymethod.type_id" class="fnname">type_id</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.61.0/core/any/struct.TypeId.html" title="struct core::any::TypeId">TypeId</a></h4></section></summary><div class='docblock'><p>Gets the <code>TypeId</code> of <code>self</code>. <a href="https://doc.rust-lang.org/1.61.0/core/any/trait.Any.html#tymethod.type_id">Read more</a></p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Borrow%3CT%3E" class="impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#209-214">source</a></span><a href="#impl-Borrow%3CT%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;T&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · <a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#211">source</a></span><a href="#method.borrow" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.Borrow.html#tymethod.borrow" class="fnname">borrow</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.61.0/std/primitive.reference.html">&amp;</a>T</h4></section></summary><div class='docblock'><p>Immutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.Borrow.html#tymethod.borrow">Read more</a></p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-BorrowMut%3CT%3E" class="impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#218-222">source</a></span><a href="#impl-BorrowMut%3CT%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a>&lt;T&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · <a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#219">source</a></span><a href="#method.borrow_mut" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut" class="fnname">borrow_mut</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.61.0/std/primitive.reference.html">&amp;mut </a>T</h4></section></summary><div class='docblock'><p>Mutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut">Read more</a></p>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -353,7 +353,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
</main>

View file

@ -1613,7 +1613,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
<div style="break-before: page; page-break-before: always;"></div><h1 id="pam-and-nsswitch"><a class="header" href="#pam-and-nsswitch">PAM and nsswitch</a></h1>
<p><a href="http://linux-pam.org">PAM</a> and <a href="https://en.wikipedia.org/wiki/Name_Service_Switch">nsswitch</a>
are the core mechanisms used by Linux and BSD clients to resolve identities from an IDM service

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -353,7 +353,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
</main>

View file

@ -1613,7 +1613,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
<div style="break-before: page; page-break-before: always;"></div><h1 id="pam-and-nsswitch"><a class="header" href="#pam-and-nsswitch">PAM and nsswitch</a></h1>
<p><a href="http://linux-pam.org">PAM</a> and <a href="https://en.wikipedia.org/wiki/Name_Service_Switch">nsswitch</a>
are the core mechanisms used by Linux and BSD clients to resolve identities from an IDM service

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -353,7 +353,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
</main>

View file

@ -1613,7 +1613,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
<div style="break-before: page; page-break-before: always;"></div><h1 id="pam-and-nsswitch"><a class="header" href="#pam-and-nsswitch">PAM and nsswitch</a></h1>
<p><a href="http://linux-pam.org">PAM</a> and <a href="https://en.wikipedia.org/wiki/Name_Service_Switch">nsswitch</a>
are the core mechanisms used by Linux and BSD clients to resolve identities from an IDM service

View file

@ -6,16 +6,16 @@
</a><h2 class="location"><a href="#">ClientError</a></h2><div class="sidebar-elems"><section><div class="block"><h3 class="sidebar-title"><a href="#variants">Variants</a></h3><ul><li><a href="#variant.AuthenticationFailed">AuthenticationFailed</a></li><li><a href="#variant.EmptyResponse">EmptyResponse</a></li><li><a href="#variant.Http">Http</a></li><li><a href="#variant.JsonDecode">JsonDecode</a></li><li><a href="#variant.JsonEncode">JsonEncode</a></li><li><a href="#variant.SystemError">SystemError</a></li><li><a href="#variant.TotpInvalidSha1">TotpInvalidSha1</a></li><li><a href="#variant.TotpVerifyFailed">TotpVerifyFailed</a></li><li><a href="#variant.Transport">Transport</a></li><li><a href="#variant.Unauthorized">Unauthorized</a></li></ul></div><div class="block"><h3 class="sidebar-title"><a href="#trait-implementations">Trait Implementations</a></h3><ul><li><a href="#impl-Debug">Debug</a></li></ul></div><div class="block"><h3 class="sidebar-title"><a href="#synthetic-implementations">Auto Trait Implementations</a></h3><ul><li><a href="#impl-RefUnwindSafe">!RefUnwindSafe</a></li><li><a href="#impl-Send">Send</a></li><li><a href="#impl-Sync">Sync</a></li><li><a href="#impl-Unpin">Unpin</a></li><li><a href="#impl-UnwindSafe">!UnwindSafe</a></li></ul></div><div class="block"><h3 class="sidebar-title"><a href="#blanket-implementations">Blanket Implementations</a></h3><ul><li><a href="#impl-Any">Any</a></li><li><a href="#impl-Borrow%3CT%3E">Borrow&lt;T&gt;</a></li><li><a href="#impl-BorrowMut%3CT%3E">BorrowMut&lt;T&gt;</a></li><li><a href="#impl-From%3CT%3E">From&lt;T&gt;</a></li><li><a href="#impl-Instrument">Instrument</a></li><li><a href="#impl-Into%3CU%3E">Into&lt;U&gt;</a></li><li><a href="#impl-TryFrom%3CU%3E">TryFrom&lt;U&gt;</a></li><li><a href="#impl-TryInto%3CU%3E">TryInto&lt;U&gt;</a></li><li><a href="#impl-VZip%3CV%3E">VZip&lt;V&gt;</a></li><li><a href="#impl-WithSubscriber">WithSubscriber</a></li></ul></div></section><h2 class="location"><a href="index.html">In kanidm_client</a></h2><div id="sidebar-vars" data-name="ClientError" data-ty="enum" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><main><div class="width-limiter"><div class="sub-container"><a class="sub-logo-container" href="../kanidm_client/index.html"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></a><nav class="sub"><div class="theme-picker hidden"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="22" height="22" alt="Pick another theme!" src="../brush.svg"></button><div id="theme-choices" role="menu"></div></div><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></form></nav></div><section id="main-content" class="content"><div class="main-heading">
<h1 class="fqn"><span class="in-band">Enum <a href="index.html">kanidm_client</a>::<wbr><a class="enum" href="#">ClientError</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></span></h1><span class="out-of-band"><a class="srclink" href="../src/kanidm_client/lib.rs.html#51-62">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span></div><div class="docblock item-decl"><pre class="rust enum"><code>pub enum ClientError {
Unauthorized,
Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="../kanidm_proto/v1/enum.OperationError.html" title="enum kanidm_proto::v1::OperationError">OperationError</a>&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>),
Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;OperationError&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>),
Transport(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>),
AuthenticationFailed,
EmptyResponse,
TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;<a class="struct" href="../kanidm_proto/v1/struct.TotpSecret.html" title="struct kanidm_proto::v1::TotpSecret">TotpSecret</a>),
TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;TotpSecret),
TotpInvalidSha1(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>),
JsonDecode(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>),
JsonEncode(<a class="struct" href="https://docs.rs/serde_json/1.0.81/serde_json/error/struct.Error.html" title="struct serde_json::error::Error">SerdeJsonError</a>),
SystemError,
}</code></pre></div><h2 id="variants" class="variants small-section-header">Variants<a href="#variants" class="anchor"></a></h2><h3 id="variant.Unauthorized" class="variant small-section-header"><a href="#variant.Unauthorized" class="anchor field"></a><code>Unauthorized</code></h3><h3 id="variant.Http" class="variant small-section-header"><a href="#variant.Http" class="anchor field"></a><code>Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="../kanidm_proto/v1/enum.OperationError.html" title="enum kanidm_proto::v1::OperationError">OperationError</a>&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.Transport" class="variant small-section-header"><a href="#variant.Transport" class="anchor field"></a><code>Transport(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>)</code></h3><h3 id="variant.AuthenticationFailed" class="variant small-section-header"><a href="#variant.AuthenticationFailed" class="anchor field"></a><code>AuthenticationFailed</code></h3><h3 id="variant.EmptyResponse" class="variant small-section-header"><a href="#variant.EmptyResponse" class="anchor field"></a><code>EmptyResponse</code></h3><h3 id="variant.TotpVerifyFailed" class="variant small-section-header"><a href="#variant.TotpVerifyFailed" class="anchor field"></a><code>TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;<a class="struct" href="../kanidm_proto/v1/struct.TotpSecret.html" title="struct kanidm_proto::v1::TotpSecret">TotpSecret</a>)</code></h3><h3 id="variant.TotpInvalidSha1" class="variant small-section-header"><a href="#variant.TotpInvalidSha1" class="anchor field"></a><code>TotpInvalidSha1(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>)</code></h3><h3 id="variant.JsonDecode" class="variant small-section-header"><a href="#variant.JsonDecode" class="anchor field"></a><code>JsonDecode(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.JsonEncode" class="variant small-section-header"><a href="#variant.JsonEncode" class="anchor field"></a><code>JsonEncode(<a class="struct" href="https://docs.rs/serde_json/1.0.81/serde_json/error/struct.Error.html" title="struct serde_json::error::Error">SerdeJsonError</a>)</code></h3><h3 id="variant.SystemError" class="variant small-section-header"><a href="#variant.SystemError" class="anchor field"></a><code>SystemError</code></h3><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor"></a></h2><div id="trait-implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Debug" class="impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#impl-Debug" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#method.fmt" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt" class="fnname">fmt</a>(&amp;self, f: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.61.0/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>&lt;'_&gt;) -&gt; <a class="type" href="https://doc.rust-lang.org/1.61.0/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></h4></section></summary><div class='docblock'><p>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt">Read more</a></p>
}</code></pre></div><h2 id="variants" class="variants small-section-header">Variants<a href="#variants" class="anchor"></a></h2><h3 id="variant.Unauthorized" class="variant small-section-header"><a href="#variant.Unauthorized" class="anchor field"></a><code>Unauthorized</code></h3><h3 id="variant.Http" class="variant small-section-header"><a href="#variant.Http" class="anchor field"></a><code>Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;OperationError&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.Transport" class="variant small-section-header"><a href="#variant.Transport" class="anchor field"></a><code>Transport(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>)</code></h3><h3 id="variant.AuthenticationFailed" class="variant small-section-header"><a href="#variant.AuthenticationFailed" class="anchor field"></a><code>AuthenticationFailed</code></h3><h3 id="variant.EmptyResponse" class="variant small-section-header"><a href="#variant.EmptyResponse" class="anchor field"></a><code>EmptyResponse</code></h3><h3 id="variant.TotpVerifyFailed" class="variant small-section-header"><a href="#variant.TotpVerifyFailed" class="anchor field"></a><code>TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;TotpSecret)</code></h3><h3 id="variant.TotpInvalidSha1" class="variant small-section-header"><a href="#variant.TotpInvalidSha1" class="anchor field"></a><code>TotpInvalidSha1(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>)</code></h3><h3 id="variant.JsonDecode" class="variant small-section-header"><a href="#variant.JsonDecode" class="anchor field"></a><code>JsonDecode(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.JsonEncode" class="variant small-section-header"><a href="#variant.JsonEncode" class="anchor field"></a><code>JsonEncode(<a class="struct" href="https://docs.rs/serde_json/1.0.81/serde_json/error/struct.Error.html" title="struct serde_json::error::Error">SerdeJsonError</a>)</code></h3><h3 id="variant.SystemError" class="variant small-section-header"><a href="#variant.SystemError" class="anchor field"></a><code>SystemError</code></h3><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor"></a></h2><div id="trait-implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Debug" class="impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#impl-Debug" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#method.fmt" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt" class="fnname">fmt</a>(&amp;self, f: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.61.0/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>&lt;'_&gt;) -&gt; <a class="type" href="https://doc.rust-lang.org/1.61.0/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></h4></section></summary><div class='docblock'><p>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt">Read more</a></p>
</div></details></div></details></div><h2 id="synthetic-implementations" class="small-section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor"></a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe" class="impl has-srclink"><a href="#impl-RefUnwindSafe" class="anchor"></a><h3 class="code-header in-band">impl !<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-Send" class="impl has-srclink"><a href="#impl-Send" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-Sync" class="impl has-srclink"><a href="#impl-Sync" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-Unpin" class="impl has-srclink"><a href="#impl-Unpin" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-UnwindSafe" class="impl has-srclink"><a href="#impl-UnwindSafe" class="anchor"></a><h3 class="code-header in-band">impl !<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section></div><h2 id="blanket-implementations" class="small-section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor"></a></h2><div id="blanket-implementations-list"><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Any" class="impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/any.rs.html#132-136">source</a></span><a href="#impl-Any" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/any/trait.Any.html" title="trait core::any::Any">Any</a> for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/any.rs.html#133">source</a></span><a href="#method.type_id" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/any/trait.Any.html#tymethod.type_id" class="fnname">type_id</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.61.0/core/any/struct.TypeId.html" title="struct core::any::TypeId">TypeId</a></h4></section></summary><div class='docblock'><p>Gets the <code>TypeId</code> of <code>self</code>. <a href="https://doc.rust-lang.org/1.61.0/core/any/trait.Any.html#tymethod.type_id">Read more</a></p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Borrow%3CT%3E" class="impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#209-214">source</a></span><a href="#impl-Borrow%3CT%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;T&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · <a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#211">source</a></span><a href="#method.borrow" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.Borrow.html#tymethod.borrow" class="fnname">borrow</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.61.0/std/primitive.reference.html">&amp;</a>T</h4></section></summary><div class='docblock'><p>Immutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.Borrow.html#tymethod.borrow">Read more</a></p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-BorrowMut%3CT%3E" class="impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#218-222">source</a></span><a href="#impl-BorrowMut%3CT%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a>&lt;T&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · <a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#219">source</a></span><a href="#method.borrow_mut" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut" class="fnname">borrow_mut</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.61.0/std/primitive.reference.html">&amp;mut </a>T</h4></section></summary><div class='docblock'><p>Mutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut">Read more</a></p>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -353,7 +353,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
</main>

View file

@ -1613,7 +1613,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
<div style="break-before: page; page-break-before: always;"></div><h1 id="pam-and-nsswitch"><a class="header" href="#pam-and-nsswitch">PAM and nsswitch</a></h1>
<p><a href="http://linux-pam.org">PAM</a> and <a href="https://en.wikipedia.org/wiki/Name_Service_Switch">nsswitch</a>
are the core mechanisms used by Linux and BSD clients to resolve identities from an IDM service

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -353,7 +353,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
</main>

View file

@ -1613,7 +1613,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
<div style="break-before: page; page-break-before: always;"></div><h1 id="pam-and-nsswitch"><a class="header" href="#pam-and-nsswitch">PAM and nsswitch</a></h1>
<p><a href="http://linux-pam.org">PAM</a> and <a href="https://en.wikipedia.org/wiki/Name_Service_Switch">nsswitch</a>
are the core mechanisms used by Linux and BSD clients to resolve identities from an IDM service

View file

@ -6,16 +6,16 @@
</a><h2 class="location"><a href="#">ClientError</a></h2><div class="sidebar-elems"><section><div class="block"><h3 class="sidebar-title"><a href="#variants">Variants</a></h3><ul><li><a href="#variant.AuthenticationFailed">AuthenticationFailed</a></li><li><a href="#variant.EmptyResponse">EmptyResponse</a></li><li><a href="#variant.Http">Http</a></li><li><a href="#variant.JsonDecode">JsonDecode</a></li><li><a href="#variant.JsonEncode">JsonEncode</a></li><li><a href="#variant.SystemError">SystemError</a></li><li><a href="#variant.TotpInvalidSha1">TotpInvalidSha1</a></li><li><a href="#variant.TotpVerifyFailed">TotpVerifyFailed</a></li><li><a href="#variant.Transport">Transport</a></li><li><a href="#variant.Unauthorized">Unauthorized</a></li></ul></div><div class="block"><h3 class="sidebar-title"><a href="#trait-implementations">Trait Implementations</a></h3><ul><li><a href="#impl-Debug">Debug</a></li></ul></div><div class="block"><h3 class="sidebar-title"><a href="#synthetic-implementations">Auto Trait Implementations</a></h3><ul><li><a href="#impl-RefUnwindSafe">!RefUnwindSafe</a></li><li><a href="#impl-Send">Send</a></li><li><a href="#impl-Sync">Sync</a></li><li><a href="#impl-Unpin">Unpin</a></li><li><a href="#impl-UnwindSafe">!UnwindSafe</a></li></ul></div><div class="block"><h3 class="sidebar-title"><a href="#blanket-implementations">Blanket Implementations</a></h3><ul><li><a href="#impl-Any">Any</a></li><li><a href="#impl-Borrow%3CT%3E">Borrow&lt;T&gt;</a></li><li><a href="#impl-BorrowMut%3CT%3E">BorrowMut&lt;T&gt;</a></li><li><a href="#impl-From%3CT%3E">From&lt;T&gt;</a></li><li><a href="#impl-Instrument">Instrument</a></li><li><a href="#impl-Into%3CU%3E">Into&lt;U&gt;</a></li><li><a href="#impl-TryFrom%3CU%3E">TryFrom&lt;U&gt;</a></li><li><a href="#impl-TryInto%3CU%3E">TryInto&lt;U&gt;</a></li><li><a href="#impl-VZip%3CV%3E">VZip&lt;V&gt;</a></li><li><a href="#impl-WithSubscriber">WithSubscriber</a></li></ul></div></section><h2 class="location"><a href="index.html">In kanidm_client</a></h2><div id="sidebar-vars" data-name="ClientError" data-ty="enum" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><main><div class="width-limiter"><div class="sub-container"><a class="sub-logo-container" href="../kanidm_client/index.html"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></a><nav class="sub"><div class="theme-picker hidden"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="22" height="22" alt="Pick another theme!" src="../brush.svg"></button><div id="theme-choices" role="menu"></div></div><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></form></nav></div><section id="main-content" class="content"><div class="main-heading">
<h1 class="fqn"><span class="in-band">Enum <a href="index.html">kanidm_client</a>::<wbr><a class="enum" href="#">ClientError</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></span></h1><span class="out-of-band"><a class="srclink" href="../src/kanidm_client/lib.rs.html#51-62">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span></div><div class="docblock item-decl"><pre class="rust enum"><code>pub enum ClientError {
Unauthorized,
Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="../kanidm_proto/v1/enum.OperationError.html" title="enum kanidm_proto::v1::OperationError">OperationError</a>&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>),
Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;OperationError&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>),
Transport(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>),
AuthenticationFailed,
EmptyResponse,
TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;<a class="struct" href="../kanidm_proto/v1/struct.TotpSecret.html" title="struct kanidm_proto::v1::TotpSecret">TotpSecret</a>),
TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;TotpSecret),
TotpInvalidSha1(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>),
JsonDecode(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>),
JsonEncode(<a class="struct" href="https://docs.rs/serde_json/1.0.81/serde_json/error/struct.Error.html" title="struct serde_json::error::Error">SerdeJsonError</a>),
SystemError,
}</code></pre></div><h2 id="variants" class="variants small-section-header">Variants<a href="#variants" class="anchor"></a></h2><h3 id="variant.Unauthorized" class="variant small-section-header"><a href="#variant.Unauthorized" class="anchor field"></a><code>Unauthorized</code></h3><h3 id="variant.Http" class="variant small-section-header"><a href="#variant.Http" class="anchor field"></a><code>Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="../kanidm_proto/v1/enum.OperationError.html" title="enum kanidm_proto::v1::OperationError">OperationError</a>&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.Transport" class="variant small-section-header"><a href="#variant.Transport" class="anchor field"></a><code>Transport(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>)</code></h3><h3 id="variant.AuthenticationFailed" class="variant small-section-header"><a href="#variant.AuthenticationFailed" class="anchor field"></a><code>AuthenticationFailed</code></h3><h3 id="variant.EmptyResponse" class="variant small-section-header"><a href="#variant.EmptyResponse" class="anchor field"></a><code>EmptyResponse</code></h3><h3 id="variant.TotpVerifyFailed" class="variant small-section-header"><a href="#variant.TotpVerifyFailed" class="anchor field"></a><code>TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;<a class="struct" href="../kanidm_proto/v1/struct.TotpSecret.html" title="struct kanidm_proto::v1::TotpSecret">TotpSecret</a>)</code></h3><h3 id="variant.TotpInvalidSha1" class="variant small-section-header"><a href="#variant.TotpInvalidSha1" class="anchor field"></a><code>TotpInvalidSha1(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>)</code></h3><h3 id="variant.JsonDecode" class="variant small-section-header"><a href="#variant.JsonDecode" class="anchor field"></a><code>JsonDecode(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.JsonEncode" class="variant small-section-header"><a href="#variant.JsonEncode" class="anchor field"></a><code>JsonEncode(<a class="struct" href="https://docs.rs/serde_json/1.0.81/serde_json/error/struct.Error.html" title="struct serde_json::error::Error">SerdeJsonError</a>)</code></h3><h3 id="variant.SystemError" class="variant small-section-header"><a href="#variant.SystemError" class="anchor field"></a><code>SystemError</code></h3><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor"></a></h2><div id="trait-implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Debug" class="impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#impl-Debug" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#method.fmt" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt" class="fnname">fmt</a>(&amp;self, f: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.61.0/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>&lt;'_&gt;) -&gt; <a class="type" href="https://doc.rust-lang.org/1.61.0/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></h4></section></summary><div class='docblock'><p>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt">Read more</a></p>
}</code></pre></div><h2 id="variants" class="variants small-section-header">Variants<a href="#variants" class="anchor"></a></h2><h3 id="variant.Unauthorized" class="variant small-section-header"><a href="#variant.Unauthorized" class="anchor field"></a><code>Unauthorized</code></h3><h3 id="variant.Http" class="variant small-section-header"><a href="#variant.Http" class="anchor field"></a><code>Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;OperationError&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.Transport" class="variant small-section-header"><a href="#variant.Transport" class="anchor field"></a><code>Transport(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>)</code></h3><h3 id="variant.AuthenticationFailed" class="variant small-section-header"><a href="#variant.AuthenticationFailed" class="anchor field"></a><code>AuthenticationFailed</code></h3><h3 id="variant.EmptyResponse" class="variant small-section-header"><a href="#variant.EmptyResponse" class="anchor field"></a><code>EmptyResponse</code></h3><h3 id="variant.TotpVerifyFailed" class="variant small-section-header"><a href="#variant.TotpVerifyFailed" class="anchor field"></a><code>TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;TotpSecret)</code></h3><h3 id="variant.TotpInvalidSha1" class="variant small-section-header"><a href="#variant.TotpInvalidSha1" class="anchor field"></a><code>TotpInvalidSha1(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>)</code></h3><h3 id="variant.JsonDecode" class="variant small-section-header"><a href="#variant.JsonDecode" class="anchor field"></a><code>JsonDecode(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.JsonEncode" class="variant small-section-header"><a href="#variant.JsonEncode" class="anchor field"></a><code>JsonEncode(<a class="struct" href="https://docs.rs/serde_json/1.0.81/serde_json/error/struct.Error.html" title="struct serde_json::error::Error">SerdeJsonError</a>)</code></h3><h3 id="variant.SystemError" class="variant small-section-header"><a href="#variant.SystemError" class="anchor field"></a><code>SystemError</code></h3><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor"></a></h2><div id="trait-implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Debug" class="impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#impl-Debug" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#method.fmt" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt" class="fnname">fmt</a>(&amp;self, f: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.61.0/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>&lt;'_&gt;) -&gt; <a class="type" href="https://doc.rust-lang.org/1.61.0/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></h4></section></summary><div class='docblock'><p>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt">Read more</a></p>
</div></details></div></details></div><h2 id="synthetic-implementations" class="small-section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor"></a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe" class="impl has-srclink"><a href="#impl-RefUnwindSafe" class="anchor"></a><h3 class="code-header in-band">impl !<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-Send" class="impl has-srclink"><a href="#impl-Send" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-Sync" class="impl has-srclink"><a href="#impl-Sync" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-Unpin" class="impl has-srclink"><a href="#impl-Unpin" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-UnwindSafe" class="impl has-srclink"><a href="#impl-UnwindSafe" class="anchor"></a><h3 class="code-header in-band">impl !<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section></div><h2 id="blanket-implementations" class="small-section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor"></a></h2><div id="blanket-implementations-list"><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Any" class="impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/any.rs.html#132-136">source</a></span><a href="#impl-Any" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/any/trait.Any.html" title="trait core::any::Any">Any</a> for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/any.rs.html#133">source</a></span><a href="#method.type_id" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/any/trait.Any.html#tymethod.type_id" class="fnname">type_id</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.61.0/core/any/struct.TypeId.html" title="struct core::any::TypeId">TypeId</a></h4></section></summary><div class='docblock'><p>Gets the <code>TypeId</code> of <code>self</code>. <a href="https://doc.rust-lang.org/1.61.0/core/any/trait.Any.html#tymethod.type_id">Read more</a></p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Borrow%3CT%3E" class="impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#209-214">source</a></span><a href="#impl-Borrow%3CT%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;T&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · <a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#211">source</a></span><a href="#method.borrow" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.Borrow.html#tymethod.borrow" class="fnname">borrow</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.61.0/std/primitive.reference.html">&amp;</a>T</h4></section></summary><div class='docblock'><p>Immutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.Borrow.html#tymethod.borrow">Read more</a></p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-BorrowMut%3CT%3E" class="impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#218-222">source</a></span><a href="#impl-BorrowMut%3CT%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a>&lt;T&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · <a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#219">source</a></span><a href="#method.borrow_mut" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut" class="fnname">borrow_mut</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.61.0/std/primitive.reference.html">&amp;mut </a>T</h4></section></summary><div class='docblock'><p>Mutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut">Read more</a></p>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -353,7 +353,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
</main>

View file

@ -1613,7 +1613,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
<div style="break-before: page; page-break-before: always;"></div><h1 id="pam-and-nsswitch"><a class="header" href="#pam-and-nsswitch">PAM and nsswitch</a></h1>
<p><a href="http://linux-pam.org">PAM</a> and <a href="https://en.wikipedia.org/wiki/Name_Service_Switch">nsswitch</a>
are the core mechanisms used by Linux and BSD clients to resolve identities from an IDM service

View file

@ -6,16 +6,16 @@
</a><h2 class="location"><a href="#">ClientError</a></h2><div class="sidebar-elems"><section><div class="block"><h3 class="sidebar-title"><a href="#variants">Variants</a></h3><ul><li><a href="#variant.AuthenticationFailed">AuthenticationFailed</a></li><li><a href="#variant.EmptyResponse">EmptyResponse</a></li><li><a href="#variant.Http">Http</a></li><li><a href="#variant.JsonDecode">JsonDecode</a></li><li><a href="#variant.JsonEncode">JsonEncode</a></li><li><a href="#variant.SystemError">SystemError</a></li><li><a href="#variant.TotpInvalidSha1">TotpInvalidSha1</a></li><li><a href="#variant.TotpVerifyFailed">TotpVerifyFailed</a></li><li><a href="#variant.Transport">Transport</a></li><li><a href="#variant.Unauthorized">Unauthorized</a></li></ul></div><div class="block"><h3 class="sidebar-title"><a href="#trait-implementations">Trait Implementations</a></h3><ul><li><a href="#impl-Debug">Debug</a></li></ul></div><div class="block"><h3 class="sidebar-title"><a href="#synthetic-implementations">Auto Trait Implementations</a></h3><ul><li><a href="#impl-RefUnwindSafe">!RefUnwindSafe</a></li><li><a href="#impl-Send">Send</a></li><li><a href="#impl-Sync">Sync</a></li><li><a href="#impl-Unpin">Unpin</a></li><li><a href="#impl-UnwindSafe">!UnwindSafe</a></li></ul></div><div class="block"><h3 class="sidebar-title"><a href="#blanket-implementations">Blanket Implementations</a></h3><ul><li><a href="#impl-Any">Any</a></li><li><a href="#impl-Borrow%3CT%3E">Borrow&lt;T&gt;</a></li><li><a href="#impl-BorrowMut%3CT%3E">BorrowMut&lt;T&gt;</a></li><li><a href="#impl-From%3CT%3E">From&lt;T&gt;</a></li><li><a href="#impl-Instrument">Instrument</a></li><li><a href="#impl-Into%3CU%3E">Into&lt;U&gt;</a></li><li><a href="#impl-TryFrom%3CU%3E">TryFrom&lt;U&gt;</a></li><li><a href="#impl-TryInto%3CU%3E">TryInto&lt;U&gt;</a></li><li><a href="#impl-VZip%3CV%3E">VZip&lt;V&gt;</a></li><li><a href="#impl-WithSubscriber">WithSubscriber</a></li></ul></div></section><h2 class="location"><a href="index.html">In kanidm_client</a></h2><div id="sidebar-vars" data-name="ClientError" data-ty="enum" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><main><div class="width-limiter"><div class="sub-container"><a class="sub-logo-container" href="../kanidm_client/index.html"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></a><nav class="sub"><div class="theme-picker hidden"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="22" height="22" alt="Pick another theme!" src="../brush.svg"></button><div id="theme-choices" role="menu"></div></div><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></form></nav></div><section id="main-content" class="content"><div class="main-heading">
<h1 class="fqn"><span class="in-band">Enum <a href="index.html">kanidm_client</a>::<wbr><a class="enum" href="#">ClientError</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></span></h1><span class="out-of-band"><a class="srclink" href="../src/kanidm_client/lib.rs.html#51-62">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span></div><div class="docblock item-decl"><pre class="rust enum"><code>pub enum ClientError {
Unauthorized,
Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="../kanidm_proto/v1/enum.OperationError.html" title="enum kanidm_proto::v1::OperationError">OperationError</a>&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>),
Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;OperationError&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>),
Transport(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>),
AuthenticationFailed,
EmptyResponse,
TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;<a class="struct" href="../kanidm_proto/v1/struct.TotpSecret.html" title="struct kanidm_proto::v1::TotpSecret">TotpSecret</a>),
TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;TotpSecret),
TotpInvalidSha1(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>),
JsonDecode(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>),
JsonEncode(<a class="struct" href="https://docs.rs/serde_json/1.0.81/serde_json/error/struct.Error.html" title="struct serde_json::error::Error">SerdeJsonError</a>),
SystemError,
}</code></pre></div><h2 id="variants" class="variants small-section-header">Variants<a href="#variants" class="anchor"></a></h2><h3 id="variant.Unauthorized" class="variant small-section-header"><a href="#variant.Unauthorized" class="anchor field"></a><code>Unauthorized</code></h3><h3 id="variant.Http" class="variant small-section-header"><a href="#variant.Http" class="anchor field"></a><code>Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="../kanidm_proto/v1/enum.OperationError.html" title="enum kanidm_proto::v1::OperationError">OperationError</a>&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.Transport" class="variant small-section-header"><a href="#variant.Transport" class="anchor field"></a><code>Transport(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>)</code></h3><h3 id="variant.AuthenticationFailed" class="variant small-section-header"><a href="#variant.AuthenticationFailed" class="anchor field"></a><code>AuthenticationFailed</code></h3><h3 id="variant.EmptyResponse" class="variant small-section-header"><a href="#variant.EmptyResponse" class="anchor field"></a><code>EmptyResponse</code></h3><h3 id="variant.TotpVerifyFailed" class="variant small-section-header"><a href="#variant.TotpVerifyFailed" class="anchor field"></a><code>TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;<a class="struct" href="../kanidm_proto/v1/struct.TotpSecret.html" title="struct kanidm_proto::v1::TotpSecret">TotpSecret</a>)</code></h3><h3 id="variant.TotpInvalidSha1" class="variant small-section-header"><a href="#variant.TotpInvalidSha1" class="anchor field"></a><code>TotpInvalidSha1(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>)</code></h3><h3 id="variant.JsonDecode" class="variant small-section-header"><a href="#variant.JsonDecode" class="anchor field"></a><code>JsonDecode(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.JsonEncode" class="variant small-section-header"><a href="#variant.JsonEncode" class="anchor field"></a><code>JsonEncode(<a class="struct" href="https://docs.rs/serde_json/1.0.81/serde_json/error/struct.Error.html" title="struct serde_json::error::Error">SerdeJsonError</a>)</code></h3><h3 id="variant.SystemError" class="variant small-section-header"><a href="#variant.SystemError" class="anchor field"></a><code>SystemError</code></h3><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor"></a></h2><div id="trait-implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Debug" class="impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#impl-Debug" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#method.fmt" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt" class="fnname">fmt</a>(&amp;self, f: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.61.0/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>&lt;'_&gt;) -&gt; <a class="type" href="https://doc.rust-lang.org/1.61.0/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></h4></section></summary><div class='docblock'><p>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt">Read more</a></p>
}</code></pre></div><h2 id="variants" class="variants small-section-header">Variants<a href="#variants" class="anchor"></a></h2><h3 id="variant.Unauthorized" class="variant small-section-header"><a href="#variant.Unauthorized" class="anchor field"></a><code>Unauthorized</code></h3><h3 id="variant.Http" class="variant small-section-header"><a href="#variant.Http" class="anchor field"></a><code>Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;OperationError&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.Transport" class="variant small-section-header"><a href="#variant.Transport" class="anchor field"></a><code>Transport(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>)</code></h3><h3 id="variant.AuthenticationFailed" class="variant small-section-header"><a href="#variant.AuthenticationFailed" class="anchor field"></a><code>AuthenticationFailed</code></h3><h3 id="variant.EmptyResponse" class="variant small-section-header"><a href="#variant.EmptyResponse" class="anchor field"></a><code>EmptyResponse</code></h3><h3 id="variant.TotpVerifyFailed" class="variant small-section-header"><a href="#variant.TotpVerifyFailed" class="anchor field"></a><code>TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;TotpSecret)</code></h3><h3 id="variant.TotpInvalidSha1" class="variant small-section-header"><a href="#variant.TotpInvalidSha1" class="anchor field"></a><code>TotpInvalidSha1(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>)</code></h3><h3 id="variant.JsonDecode" class="variant small-section-header"><a href="#variant.JsonDecode" class="anchor field"></a><code>JsonDecode(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.JsonEncode" class="variant small-section-header"><a href="#variant.JsonEncode" class="anchor field"></a><code>JsonEncode(<a class="struct" href="https://docs.rs/serde_json/1.0.81/serde_json/error/struct.Error.html" title="struct serde_json::error::Error">SerdeJsonError</a>)</code></h3><h3 id="variant.SystemError" class="variant small-section-header"><a href="#variant.SystemError" class="anchor field"></a><code>SystemError</code></h3><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor"></a></h2><div id="trait-implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Debug" class="impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#impl-Debug" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#method.fmt" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt" class="fnname">fmt</a>(&amp;self, f: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.61.0/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>&lt;'_&gt;) -&gt; <a class="type" href="https://doc.rust-lang.org/1.61.0/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></h4></section></summary><div class='docblock'><p>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt">Read more</a></p>
</div></details></div></details></div><h2 id="synthetic-implementations" class="small-section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor"></a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe" class="impl has-srclink"><a href="#impl-RefUnwindSafe" class="anchor"></a><h3 class="code-header in-band">impl !<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-Send" class="impl has-srclink"><a href="#impl-Send" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-Sync" class="impl has-srclink"><a href="#impl-Sync" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-Unpin" class="impl has-srclink"><a href="#impl-Unpin" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-UnwindSafe" class="impl has-srclink"><a href="#impl-UnwindSafe" class="anchor"></a><h3 class="code-header in-band">impl !<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section></div><h2 id="blanket-implementations" class="small-section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor"></a></h2><div id="blanket-implementations-list"><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Any" class="impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/any.rs.html#132-136">source</a></span><a href="#impl-Any" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/any/trait.Any.html" title="trait core::any::Any">Any</a> for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/any.rs.html#133">source</a></span><a href="#method.type_id" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/any/trait.Any.html#tymethod.type_id" class="fnname">type_id</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.61.0/core/any/struct.TypeId.html" title="struct core::any::TypeId">TypeId</a></h4></section></summary><div class='docblock'><p>Gets the <code>TypeId</code> of <code>self</code>. <a href="https://doc.rust-lang.org/1.61.0/core/any/trait.Any.html#tymethod.type_id">Read more</a></p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Borrow%3CT%3E" class="impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#209-214">source</a></span><a href="#impl-Borrow%3CT%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;T&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · <a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#211">source</a></span><a href="#method.borrow" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.Borrow.html#tymethod.borrow" class="fnname">borrow</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.61.0/std/primitive.reference.html">&amp;</a>T</h4></section></summary><div class='docblock'><p>Immutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.Borrow.html#tymethod.borrow">Read more</a></p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-BorrowMut%3CT%3E" class="impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#218-222">source</a></span><a href="#impl-BorrowMut%3CT%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a>&lt;T&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · <a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#219">source</a></span><a href="#method.borrow_mut" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut" class="fnname">borrow_mut</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.61.0/std/primitive.reference.html">&amp;mut </a>T</h4></section></summary><div class='docblock'><p>Mutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut">Read more</a></p>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -353,7 +353,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
</main>

View file

@ -1613,7 +1613,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
<div style="break-before: page; page-break-before: always;"></div><h1 id="pam-and-nsswitch"><a class="header" href="#pam-and-nsswitch">PAM and nsswitch</a></h1>
<p><a href="http://linux-pam.org">PAM</a> and <a href="https://en.wikipedia.org/wiki/Name_Service_Switch">nsswitch</a>
are the core mechanisms used by Linux and BSD clients to resolve identities from an IDM service

View file

@ -6,16 +6,16 @@
</a><h2 class="location"><a href="#">ClientError</a></h2><div class="sidebar-elems"><section><div class="block"><h3 class="sidebar-title"><a href="#variants">Variants</a></h3><ul><li><a href="#variant.AuthenticationFailed">AuthenticationFailed</a></li><li><a href="#variant.EmptyResponse">EmptyResponse</a></li><li><a href="#variant.Http">Http</a></li><li><a href="#variant.JsonDecode">JsonDecode</a></li><li><a href="#variant.JsonEncode">JsonEncode</a></li><li><a href="#variant.SystemError">SystemError</a></li><li><a href="#variant.TotpInvalidSha1">TotpInvalidSha1</a></li><li><a href="#variant.TotpVerifyFailed">TotpVerifyFailed</a></li><li><a href="#variant.Transport">Transport</a></li><li><a href="#variant.Unauthorized">Unauthorized</a></li></ul></div><div class="block"><h3 class="sidebar-title"><a href="#trait-implementations">Trait Implementations</a></h3><ul><li><a href="#impl-Debug">Debug</a></li></ul></div><div class="block"><h3 class="sidebar-title"><a href="#synthetic-implementations">Auto Trait Implementations</a></h3><ul><li><a href="#impl-RefUnwindSafe">!RefUnwindSafe</a></li><li><a href="#impl-Send">Send</a></li><li><a href="#impl-Sync">Sync</a></li><li><a href="#impl-Unpin">Unpin</a></li><li><a href="#impl-UnwindSafe">!UnwindSafe</a></li></ul></div><div class="block"><h3 class="sidebar-title"><a href="#blanket-implementations">Blanket Implementations</a></h3><ul><li><a href="#impl-Any">Any</a></li><li><a href="#impl-Borrow%3CT%3E">Borrow&lt;T&gt;</a></li><li><a href="#impl-BorrowMut%3CT%3E">BorrowMut&lt;T&gt;</a></li><li><a href="#impl-From%3CT%3E">From&lt;T&gt;</a></li><li><a href="#impl-Instrument">Instrument</a></li><li><a href="#impl-Into%3CU%3E">Into&lt;U&gt;</a></li><li><a href="#impl-TryFrom%3CU%3E">TryFrom&lt;U&gt;</a></li><li><a href="#impl-TryInto%3CU%3E">TryInto&lt;U&gt;</a></li><li><a href="#impl-VZip%3CV%3E">VZip&lt;V&gt;</a></li><li><a href="#impl-WithSubscriber">WithSubscriber</a></li></ul></div></section><h2 class="location"><a href="index.html">In kanidm_client</a></h2><div id="sidebar-vars" data-name="ClientError" data-ty="enum" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><main><div class="width-limiter"><div class="sub-container"><a class="sub-logo-container" href="../kanidm_client/index.html"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></a><nav class="sub"><div class="theme-picker hidden"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="22" height="22" alt="Pick another theme!" src="../brush.svg"></button><div id="theme-choices" role="menu"></div></div><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></form></nav></div><section id="main-content" class="content"><div class="main-heading">
<h1 class="fqn"><span class="in-band">Enum <a href="index.html">kanidm_client</a>::<wbr><a class="enum" href="#">ClientError</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></span></h1><span class="out-of-band"><a class="srclink" href="../src/kanidm_client/lib.rs.html#51-62">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span></div><div class="docblock item-decl"><pre class="rust enum"><code>pub enum ClientError {
Unauthorized,
Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="../kanidm_proto/v1/enum.OperationError.html" title="enum kanidm_proto::v1::OperationError">OperationError</a>&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>),
Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;OperationError&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>),
Transport(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>),
AuthenticationFailed,
EmptyResponse,
TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;<a class="struct" href="../kanidm_proto/v1/struct.TotpSecret.html" title="struct kanidm_proto::v1::TotpSecret">TotpSecret</a>),
TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;TotpSecret),
TotpInvalidSha1(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>),
JsonDecode(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>),
JsonEncode(<a class="struct" href="https://docs.rs/serde_json/1.0.81/serde_json/error/struct.Error.html" title="struct serde_json::error::Error">SerdeJsonError</a>),
SystemError,
}</code></pre></div><h2 id="variants" class="variants small-section-header">Variants<a href="#variants" class="anchor"></a></h2><h3 id="variant.Unauthorized" class="variant small-section-header"><a href="#variant.Unauthorized" class="anchor field"></a><code>Unauthorized</code></h3><h3 id="variant.Http" class="variant small-section-header"><a href="#variant.Http" class="anchor field"></a><code>Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="../kanidm_proto/v1/enum.OperationError.html" title="enum kanidm_proto::v1::OperationError">OperationError</a>&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.Transport" class="variant small-section-header"><a href="#variant.Transport" class="anchor field"></a><code>Transport(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>)</code></h3><h3 id="variant.AuthenticationFailed" class="variant small-section-header"><a href="#variant.AuthenticationFailed" class="anchor field"></a><code>AuthenticationFailed</code></h3><h3 id="variant.EmptyResponse" class="variant small-section-header"><a href="#variant.EmptyResponse" class="anchor field"></a><code>EmptyResponse</code></h3><h3 id="variant.TotpVerifyFailed" class="variant small-section-header"><a href="#variant.TotpVerifyFailed" class="anchor field"></a><code>TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;<a class="struct" href="../kanidm_proto/v1/struct.TotpSecret.html" title="struct kanidm_proto::v1::TotpSecret">TotpSecret</a>)</code></h3><h3 id="variant.TotpInvalidSha1" class="variant small-section-header"><a href="#variant.TotpInvalidSha1" class="anchor field"></a><code>TotpInvalidSha1(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>)</code></h3><h3 id="variant.JsonDecode" class="variant small-section-header"><a href="#variant.JsonDecode" class="anchor field"></a><code>JsonDecode(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.JsonEncode" class="variant small-section-header"><a href="#variant.JsonEncode" class="anchor field"></a><code>JsonEncode(<a class="struct" href="https://docs.rs/serde_json/1.0.81/serde_json/error/struct.Error.html" title="struct serde_json::error::Error">SerdeJsonError</a>)</code></h3><h3 id="variant.SystemError" class="variant small-section-header"><a href="#variant.SystemError" class="anchor field"></a><code>SystemError</code></h3><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor"></a></h2><div id="trait-implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Debug" class="impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#impl-Debug" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#method.fmt" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt" class="fnname">fmt</a>(&amp;self, f: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.61.0/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>&lt;'_&gt;) -&gt; <a class="type" href="https://doc.rust-lang.org/1.61.0/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></h4></section></summary><div class='docblock'><p>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt">Read more</a></p>
}</code></pre></div><h2 id="variants" class="variants small-section-header">Variants<a href="#variants" class="anchor"></a></h2><h3 id="variant.Unauthorized" class="variant small-section-header"><a href="#variant.Unauthorized" class="anchor field"></a><code>Unauthorized</code></h3><h3 id="variant.Http" class="variant small-section-header"><a href="#variant.Http" class="anchor field"></a><code>Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;OperationError&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.Transport" class="variant small-section-header"><a href="#variant.Transport" class="anchor field"></a><code>Transport(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>)</code></h3><h3 id="variant.AuthenticationFailed" class="variant small-section-header"><a href="#variant.AuthenticationFailed" class="anchor field"></a><code>AuthenticationFailed</code></h3><h3 id="variant.EmptyResponse" class="variant small-section-header"><a href="#variant.EmptyResponse" class="anchor field"></a><code>EmptyResponse</code></h3><h3 id="variant.TotpVerifyFailed" class="variant small-section-header"><a href="#variant.TotpVerifyFailed" class="anchor field"></a><code>TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;TotpSecret)</code></h3><h3 id="variant.TotpInvalidSha1" class="variant small-section-header"><a href="#variant.TotpInvalidSha1" class="anchor field"></a><code>TotpInvalidSha1(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>)</code></h3><h3 id="variant.JsonDecode" class="variant small-section-header"><a href="#variant.JsonDecode" class="anchor field"></a><code>JsonDecode(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.JsonEncode" class="variant small-section-header"><a href="#variant.JsonEncode" class="anchor field"></a><code>JsonEncode(<a class="struct" href="https://docs.rs/serde_json/1.0.81/serde_json/error/struct.Error.html" title="struct serde_json::error::Error">SerdeJsonError</a>)</code></h3><h3 id="variant.SystemError" class="variant small-section-header"><a href="#variant.SystemError" class="anchor field"></a><code>SystemError</code></h3><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor"></a></h2><div id="trait-implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Debug" class="impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#impl-Debug" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#method.fmt" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt" class="fnname">fmt</a>(&amp;self, f: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.61.0/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>&lt;'_&gt;) -&gt; <a class="type" href="https://doc.rust-lang.org/1.61.0/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></h4></section></summary><div class='docblock'><p>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt">Read more</a></p>
</div></details></div></details></div><h2 id="synthetic-implementations" class="small-section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor"></a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe" class="impl has-srclink"><a href="#impl-RefUnwindSafe" class="anchor"></a><h3 class="code-header in-band">impl !<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-Send" class="impl has-srclink"><a href="#impl-Send" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-Sync" class="impl has-srclink"><a href="#impl-Sync" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-Unpin" class="impl has-srclink"><a href="#impl-Unpin" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-UnwindSafe" class="impl has-srclink"><a href="#impl-UnwindSafe" class="anchor"></a><h3 class="code-header in-band">impl !<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section></div><h2 id="blanket-implementations" class="small-section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor"></a></h2><div id="blanket-implementations-list"><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Any" class="impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/any.rs.html#132-136">source</a></span><a href="#impl-Any" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/any/trait.Any.html" title="trait core::any::Any">Any</a> for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/any.rs.html#133">source</a></span><a href="#method.type_id" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/any/trait.Any.html#tymethod.type_id" class="fnname">type_id</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.61.0/core/any/struct.TypeId.html" title="struct core::any::TypeId">TypeId</a></h4></section></summary><div class='docblock'><p>Gets the <code>TypeId</code> of <code>self</code>. <a href="https://doc.rust-lang.org/1.61.0/core/any/trait.Any.html#tymethod.type_id">Read more</a></p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Borrow%3CT%3E" class="impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#209-214">source</a></span><a href="#impl-Borrow%3CT%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;T&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · <a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#211">source</a></span><a href="#method.borrow" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.Borrow.html#tymethod.borrow" class="fnname">borrow</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.61.0/std/primitive.reference.html">&amp;</a>T</h4></section></summary><div class='docblock'><p>Immutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.Borrow.html#tymethod.borrow">Read more</a></p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-BorrowMut%3CT%3E" class="impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#218-222">source</a></span><a href="#impl-BorrowMut%3CT%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a>&lt;T&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · <a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#219">source</a></span><a href="#method.borrow_mut" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut" class="fnname">borrow_mut</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.61.0/std/primitive.reference.html">&amp;mut </a>T</h4></section></summary><div class='docblock'><p>Mutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut">Read more</a></p>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -353,7 +353,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
</main>

View file

@ -1613,7 +1613,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
<div style="break-before: page; page-break-before: always;"></div><h1 id="pam-and-nsswitch"><a class="header" href="#pam-and-nsswitch">PAM and nsswitch</a></h1>
<p><a href="http://linux-pam.org">PAM</a> and <a href="https://en.wikipedia.org/wiki/Name_Service_Switch">nsswitch</a>
are the core mechanisms used by Linux and BSD clients to resolve identities from an IDM service

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -353,7 +353,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
</main>

View file

@ -1613,7 +1613,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
<div style="break-before: page; page-break-before: always;"></div><h1 id="pam-and-nsswitch"><a class="header" href="#pam-and-nsswitch">PAM and nsswitch</a></h1>
<p><a href="http://linux-pam.org">PAM</a> and <a href="https://en.wikipedia.org/wiki/Name_Service_Switch">nsswitch</a>
are the core mechanisms used by Linux and BSD clients to resolve identities from an IDM service

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -353,7 +353,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
</main>

View file

@ -1613,7 +1613,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
<div style="break-before: page; page-break-before: always;"></div><h1 id="pam-and-nsswitch"><a class="header" href="#pam-and-nsswitch">PAM and nsswitch</a></h1>
<p><a href="http://linux-pam.org">PAM</a> and <a href="https://en.wikipedia.org/wiki/Name_Service_Switch">nsswitch</a>
are the core mechanisms used by Linux and BSD clients to resolve identities from an IDM service

View file

@ -6,16 +6,16 @@
</a><h2 class="location"><a href="#">ClientError</a></h2><div class="sidebar-elems"><section><div class="block"><h3 class="sidebar-title"><a href="#variants">Variants</a></h3><ul><li><a href="#variant.AuthenticationFailed">AuthenticationFailed</a></li><li><a href="#variant.EmptyResponse">EmptyResponse</a></li><li><a href="#variant.Http">Http</a></li><li><a href="#variant.JsonDecode">JsonDecode</a></li><li><a href="#variant.JsonEncode">JsonEncode</a></li><li><a href="#variant.SystemError">SystemError</a></li><li><a href="#variant.TotpInvalidSha1">TotpInvalidSha1</a></li><li><a href="#variant.TotpVerifyFailed">TotpVerifyFailed</a></li><li><a href="#variant.Transport">Transport</a></li><li><a href="#variant.Unauthorized">Unauthorized</a></li></ul></div><div class="block"><h3 class="sidebar-title"><a href="#trait-implementations">Trait Implementations</a></h3><ul><li><a href="#impl-Debug">Debug</a></li></ul></div><div class="block"><h3 class="sidebar-title"><a href="#synthetic-implementations">Auto Trait Implementations</a></h3><ul><li><a href="#impl-RefUnwindSafe">!RefUnwindSafe</a></li><li><a href="#impl-Send">Send</a></li><li><a href="#impl-Sync">Sync</a></li><li><a href="#impl-Unpin">Unpin</a></li><li><a href="#impl-UnwindSafe">!UnwindSafe</a></li></ul></div><div class="block"><h3 class="sidebar-title"><a href="#blanket-implementations">Blanket Implementations</a></h3><ul><li><a href="#impl-Any">Any</a></li><li><a href="#impl-Borrow%3CT%3E">Borrow&lt;T&gt;</a></li><li><a href="#impl-BorrowMut%3CT%3E">BorrowMut&lt;T&gt;</a></li><li><a href="#impl-From%3CT%3E">From&lt;T&gt;</a></li><li><a href="#impl-Instrument">Instrument</a></li><li><a href="#impl-Into%3CU%3E">Into&lt;U&gt;</a></li><li><a href="#impl-TryFrom%3CU%3E">TryFrom&lt;U&gt;</a></li><li><a href="#impl-TryInto%3CU%3E">TryInto&lt;U&gt;</a></li><li><a href="#impl-VZip%3CV%3E">VZip&lt;V&gt;</a></li><li><a href="#impl-WithSubscriber">WithSubscriber</a></li></ul></div></section><h2 class="location"><a href="index.html">In kanidm_client</a></h2><div id="sidebar-vars" data-name="ClientError" data-ty="enum" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><main><div class="width-limiter"><div class="sub-container"><a class="sub-logo-container" href="../kanidm_client/index.html"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></a><nav class="sub"><div class="theme-picker hidden"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="22" height="22" alt="Pick another theme!" src="../brush.svg"></button><div id="theme-choices" role="menu"></div></div><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></form></nav></div><section id="main-content" class="content"><div class="main-heading">
<h1 class="fqn"><span class="in-band">Enum <a href="index.html">kanidm_client</a>::<wbr><a class="enum" href="#">ClientError</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></span></h1><span class="out-of-band"><a class="srclink" href="../src/kanidm_client/lib.rs.html#51-62">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span></div><div class="docblock item-decl"><pre class="rust enum"><code>pub enum ClientError {
Unauthorized,
Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="../kanidm_proto/v1/enum.OperationError.html" title="enum kanidm_proto::v1::OperationError">OperationError</a>&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>),
Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;OperationError&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>),
Transport(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>),
AuthenticationFailed,
EmptyResponse,
TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;<a class="struct" href="../kanidm_proto/v1/struct.TotpSecret.html" title="struct kanidm_proto::v1::TotpSecret">TotpSecret</a>),
TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;TotpSecret),
TotpInvalidSha1(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>),
JsonDecode(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>),
JsonEncode(<a class="struct" href="https://docs.rs/serde_json/1.0.81/serde_json/error/struct.Error.html" title="struct serde_json::error::Error">SerdeJsonError</a>),
SystemError,
}</code></pre></div><h2 id="variants" class="variants small-section-header">Variants<a href="#variants" class="anchor"></a></h2><h3 id="variant.Unauthorized" class="variant small-section-header"><a href="#variant.Unauthorized" class="anchor field"></a><code>Unauthorized</code></h3><h3 id="variant.Http" class="variant small-section-header"><a href="#variant.Http" class="anchor field"></a><code>Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="../kanidm_proto/v1/enum.OperationError.html" title="enum kanidm_proto::v1::OperationError">OperationError</a>&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.Transport" class="variant small-section-header"><a href="#variant.Transport" class="anchor field"></a><code>Transport(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>)</code></h3><h3 id="variant.AuthenticationFailed" class="variant small-section-header"><a href="#variant.AuthenticationFailed" class="anchor field"></a><code>AuthenticationFailed</code></h3><h3 id="variant.EmptyResponse" class="variant small-section-header"><a href="#variant.EmptyResponse" class="anchor field"></a><code>EmptyResponse</code></h3><h3 id="variant.TotpVerifyFailed" class="variant small-section-header"><a href="#variant.TotpVerifyFailed" class="anchor field"></a><code>TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;<a class="struct" href="../kanidm_proto/v1/struct.TotpSecret.html" title="struct kanidm_proto::v1::TotpSecret">TotpSecret</a>)</code></h3><h3 id="variant.TotpInvalidSha1" class="variant small-section-header"><a href="#variant.TotpInvalidSha1" class="anchor field"></a><code>TotpInvalidSha1(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>)</code></h3><h3 id="variant.JsonDecode" class="variant small-section-header"><a href="#variant.JsonDecode" class="anchor field"></a><code>JsonDecode(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.JsonEncode" class="variant small-section-header"><a href="#variant.JsonEncode" class="anchor field"></a><code>JsonEncode(<a class="struct" href="https://docs.rs/serde_json/1.0.81/serde_json/error/struct.Error.html" title="struct serde_json::error::Error">SerdeJsonError</a>)</code></h3><h3 id="variant.SystemError" class="variant small-section-header"><a href="#variant.SystemError" class="anchor field"></a><code>SystemError</code></h3><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor"></a></h2><div id="trait-implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Debug" class="impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#impl-Debug" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#method.fmt" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt" class="fnname">fmt</a>(&amp;self, f: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.61.0/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>&lt;'_&gt;) -&gt; <a class="type" href="https://doc.rust-lang.org/1.61.0/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></h4></section></summary><div class='docblock'><p>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt">Read more</a></p>
}</code></pre></div><h2 id="variants" class="variants small-section-header">Variants<a href="#variants" class="anchor"></a></h2><h3 id="variant.Unauthorized" class="variant small-section-header"><a href="#variant.Unauthorized" class="anchor field"></a><code>Unauthorized</code></h3><h3 id="variant.Http" class="variant small-section-header"><a href="#variant.Http" class="anchor field"></a><code>Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;OperationError&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.Transport" class="variant small-section-header"><a href="#variant.Transport" class="anchor field"></a><code>Transport(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>)</code></h3><h3 id="variant.AuthenticationFailed" class="variant small-section-header"><a href="#variant.AuthenticationFailed" class="anchor field"></a><code>AuthenticationFailed</code></h3><h3 id="variant.EmptyResponse" class="variant small-section-header"><a href="#variant.EmptyResponse" class="anchor field"></a><code>EmptyResponse</code></h3><h3 id="variant.TotpVerifyFailed" class="variant small-section-header"><a href="#variant.TotpVerifyFailed" class="anchor field"></a><code>TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;TotpSecret)</code></h3><h3 id="variant.TotpInvalidSha1" class="variant small-section-header"><a href="#variant.TotpInvalidSha1" class="anchor field"></a><code>TotpInvalidSha1(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>)</code></h3><h3 id="variant.JsonDecode" class="variant small-section-header"><a href="#variant.JsonDecode" class="anchor field"></a><code>JsonDecode(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.JsonEncode" class="variant small-section-header"><a href="#variant.JsonEncode" class="anchor field"></a><code>JsonEncode(<a class="struct" href="https://docs.rs/serde_json/1.0.81/serde_json/error/struct.Error.html" title="struct serde_json::error::Error">SerdeJsonError</a>)</code></h3><h3 id="variant.SystemError" class="variant small-section-header"><a href="#variant.SystemError" class="anchor field"></a><code>SystemError</code></h3><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor"></a></h2><div id="trait-implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Debug" class="impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#impl-Debug" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#method.fmt" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt" class="fnname">fmt</a>(&amp;self, f: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.61.0/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>&lt;'_&gt;) -&gt; <a class="type" href="https://doc.rust-lang.org/1.61.0/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></h4></section></summary><div class='docblock'><p>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt">Read more</a></p>
</div></details></div></details></div><h2 id="synthetic-implementations" class="small-section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor"></a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe" class="impl has-srclink"><a href="#impl-RefUnwindSafe" class="anchor"></a><h3 class="code-header in-band">impl !<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-Send" class="impl has-srclink"><a href="#impl-Send" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-Sync" class="impl has-srclink"><a href="#impl-Sync" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-Unpin" class="impl has-srclink"><a href="#impl-Unpin" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-UnwindSafe" class="impl has-srclink"><a href="#impl-UnwindSafe" class="anchor"></a><h3 class="code-header in-band">impl !<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section></div><h2 id="blanket-implementations" class="small-section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor"></a></h2><div id="blanket-implementations-list"><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Any" class="impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/any.rs.html#132-136">source</a></span><a href="#impl-Any" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/any/trait.Any.html" title="trait core::any::Any">Any</a> for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/any.rs.html#133">source</a></span><a href="#method.type_id" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/any/trait.Any.html#tymethod.type_id" class="fnname">type_id</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.61.0/core/any/struct.TypeId.html" title="struct core::any::TypeId">TypeId</a></h4></section></summary><div class='docblock'><p>Gets the <code>TypeId</code> of <code>self</code>. <a href="https://doc.rust-lang.org/1.61.0/core/any/trait.Any.html#tymethod.type_id">Read more</a></p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Borrow%3CT%3E" class="impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#209-214">source</a></span><a href="#impl-Borrow%3CT%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;T&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · <a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#211">source</a></span><a href="#method.borrow" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.Borrow.html#tymethod.borrow" class="fnname">borrow</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.61.0/std/primitive.reference.html">&amp;</a>T</h4></section></summary><div class='docblock'><p>Immutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.Borrow.html#tymethod.borrow">Read more</a></p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-BorrowMut%3CT%3E" class="impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#218-222">source</a></span><a href="#impl-BorrowMut%3CT%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a>&lt;T&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · <a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#219">source</a></span><a href="#method.borrow_mut" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut" class="fnname">borrow_mut</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.61.0/std/primitive.reference.html">&amp;mut </a>T</h4></section></summary><div class='docblock'><p>Mutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut">Read more</a></p>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -353,7 +353,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
</main>

View file

@ -1613,7 +1613,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
<div style="break-before: page; page-break-before: always;"></div><h1 id="pam-and-nsswitch"><a class="header" href="#pam-and-nsswitch">PAM and nsswitch</a></h1>
<p><a href="http://linux-pam.org">PAM</a> and <a href="https://en.wikipedia.org/wiki/Name_Service_Switch">nsswitch</a>
are the core mechanisms used by Linux and BSD clients to resolve identities from an IDM service

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -353,7 +353,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
</main>

View file

@ -1613,7 +1613,29 @@ the interactive configuration generator. Alternately, you can set the following
these to a group with a scope map due to Velociraptors high impact.</p>
<pre><code># kanidm group create velociraptor_users
# kanidm group add_members velociraptor_users ...
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email</code></pre>
kanidm system oauth2 create_scope_map &lt;resource server name&gt; velociraptor_users openid email
</code></pre>
<h3 id="vouch-proxy"><a class="header" href="#vouch-proxy">Vouch Proxy</a></h3>
<p><em>You need to run at least the version 0.37.0</em>.</p>
<p>Vouch Proxy supports multiple OAuth and OIDC login providers.
To configure it you need to pass:</p>
<pre><code class="language-yaml">oauth:
auth_url: https://idm.wherekanidmruns.com/ui/oauth2
callback_url: https://login.wherevouchproxyruns.com/auth
client_id: &lt;oauth2_rs_name&gt; # Found in kanidm system oauth2 get XXXX (should be the same as XXXX)
client_secret: &lt;oauth2_rs_basic_secret&gt; # Found in kanidm system oauth2 get XXXX
code_challenge_method: S256
provider: oidc
scopes:
- email # Important, vouch proxy requiers a username (but does not use the proper scope, sub) or an email see https://github.com/vouch/vouch-proxy/issues/309, 310
token_url: https://idm.wherekanidmruns.com/oauth2/token
user_info_url: https://idm.wherekanidmruns.com/oauth2/openid/&lt;oauth2_rs_name&gt;/userinfo
</code></pre>
<p>The <code>email</code> scope needs to be passed and thus the attribute needs to exist in
the account:</p>
<pre><code>kanidm login --name idm_admin
kanidm account person extend YYYY --mail &quot;YYYY@somedomain.com&quot; --name idm_admin
</code></pre>
<div style="break-before: page; page-break-before: always;"></div><h1 id="pam-and-nsswitch"><a class="header" href="#pam-and-nsswitch">PAM and nsswitch</a></h1>
<p><a href="http://linux-pam.org">PAM</a> and <a href="https://en.wikipedia.org/wiki/Name_Service_Switch">nsswitch</a>
are the core mechanisms used by Linux and BSD clients to resolve identities from an IDM service

View file

@ -6,16 +6,16 @@
</a><h2 class="location"><a href="#">ClientError</a></h2><div class="sidebar-elems"><section><div class="block"><h3 class="sidebar-title"><a href="#variants">Variants</a></h3><ul><li><a href="#variant.AuthenticationFailed">AuthenticationFailed</a></li><li><a href="#variant.EmptyResponse">EmptyResponse</a></li><li><a href="#variant.Http">Http</a></li><li><a href="#variant.JsonDecode">JsonDecode</a></li><li><a href="#variant.JsonEncode">JsonEncode</a></li><li><a href="#variant.SystemError">SystemError</a></li><li><a href="#variant.TotpInvalidSha1">TotpInvalidSha1</a></li><li><a href="#variant.TotpVerifyFailed">TotpVerifyFailed</a></li><li><a href="#variant.Transport">Transport</a></li><li><a href="#variant.Unauthorized">Unauthorized</a></li></ul></div><div class="block"><h3 class="sidebar-title"><a href="#trait-implementations">Trait Implementations</a></h3><ul><li><a href="#impl-Debug">Debug</a></li></ul></div><div class="block"><h3 class="sidebar-title"><a href="#synthetic-implementations">Auto Trait Implementations</a></h3><ul><li><a href="#impl-RefUnwindSafe">!RefUnwindSafe</a></li><li><a href="#impl-Send">Send</a></li><li><a href="#impl-Sync">Sync</a></li><li><a href="#impl-Unpin">Unpin</a></li><li><a href="#impl-UnwindSafe">!UnwindSafe</a></li></ul></div><div class="block"><h3 class="sidebar-title"><a href="#blanket-implementations">Blanket Implementations</a></h3><ul><li><a href="#impl-Any">Any</a></li><li><a href="#impl-Borrow%3CT%3E">Borrow&lt;T&gt;</a></li><li><a href="#impl-BorrowMut%3CT%3E">BorrowMut&lt;T&gt;</a></li><li><a href="#impl-From%3CT%3E">From&lt;T&gt;</a></li><li><a href="#impl-Instrument">Instrument</a></li><li><a href="#impl-Into%3CU%3E">Into&lt;U&gt;</a></li><li><a href="#impl-TryFrom%3CU%3E">TryFrom&lt;U&gt;</a></li><li><a href="#impl-TryInto%3CU%3E">TryInto&lt;U&gt;</a></li><li><a href="#impl-VZip%3CV%3E">VZip&lt;V&gt;</a></li><li><a href="#impl-WithSubscriber">WithSubscriber</a></li></ul></div></section><h2 class="location"><a href="index.html">In kanidm_client</a></h2><div id="sidebar-vars" data-name="ClientError" data-ty="enum" data-relpath=""></div><script defer src="sidebar-items.js"></script></div></nav><main><div class="width-limiter"><div class="sub-container"><a class="sub-logo-container" href="../kanidm_client/index.html"><img class="rust-logo" src="../rust-logo.svg" alt="logo"></a><nav class="sub"><div class="theme-picker hidden"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu" title="themes"><img width="22" height="22" alt="Pick another theme!" src="../brush.svg"></button><div id="theme-choices" role="menu"></div></div><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"><button type="button" id="help-button" title="help">?</button><a id="settings-menu" href="../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../wheel.svg"></a></div></form></nav></div><section id="main-content" class="content"><div class="main-heading">
<h1 class="fqn"><span class="in-band">Enum <a href="index.html">kanidm_client</a>::<wbr><a class="enum" href="#">ClientError</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../clipboard.svg" width="19" height="18" alt="Copy item path"></button></span></h1><span class="out-of-band"><a class="srclink" href="../src/kanidm_client/lib.rs.html#51-62">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span></div><div class="docblock item-decl"><pre class="rust enum"><code>pub enum ClientError {
Unauthorized,
Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="../kanidm_proto/v1/enum.OperationError.html" title="enum kanidm_proto::v1::OperationError">OperationError</a>&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>),
Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;OperationError&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>),
Transport(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>),
AuthenticationFailed,
EmptyResponse,
TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;<a class="struct" href="../kanidm_proto/v1/struct.TotpSecret.html" title="struct kanidm_proto::v1::TotpSecret">TotpSecret</a>),
TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;TotpSecret),
TotpInvalidSha1(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>),
JsonDecode(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>),
JsonEncode(<a class="struct" href="https://docs.rs/serde_json/1.0.81/serde_json/error/struct.Error.html" title="struct serde_json::error::Error">SerdeJsonError</a>),
SystemError,
}</code></pre></div><h2 id="variants" class="variants small-section-header">Variants<a href="#variants" class="anchor"></a></h2><h3 id="variant.Unauthorized" class="variant small-section-header"><a href="#variant.Unauthorized" class="anchor field"></a><code>Unauthorized</code></h3><h3 id="variant.Http" class="variant small-section-header"><a href="#variant.Http" class="anchor field"></a><code>Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="enum" href="../kanidm_proto/v1/enum.OperationError.html" title="enum kanidm_proto::v1::OperationError">OperationError</a>&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.Transport" class="variant small-section-header"><a href="#variant.Transport" class="anchor field"></a><code>Transport(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>)</code></h3><h3 id="variant.AuthenticationFailed" class="variant small-section-header"><a href="#variant.AuthenticationFailed" class="anchor field"></a><code>AuthenticationFailed</code></h3><h3 id="variant.EmptyResponse" class="variant small-section-header"><a href="#variant.EmptyResponse" class="anchor field"></a><code>EmptyResponse</code></h3><h3 id="variant.TotpVerifyFailed" class="variant small-section-header"><a href="#variant.TotpVerifyFailed" class="anchor field"></a><code>TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;<a class="struct" href="../kanidm_proto/v1/struct.TotpSecret.html" title="struct kanidm_proto::v1::TotpSecret">TotpSecret</a>)</code></h3><h3 id="variant.TotpInvalidSha1" class="variant small-section-header"><a href="#variant.TotpInvalidSha1" class="anchor field"></a><code>TotpInvalidSha1(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>)</code></h3><h3 id="variant.JsonDecode" class="variant small-section-header"><a href="#variant.JsonDecode" class="anchor field"></a><code>JsonDecode(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.JsonEncode" class="variant small-section-header"><a href="#variant.JsonEncode" class="anchor field"></a><code>JsonEncode(<a class="struct" href="https://docs.rs/serde_json/1.0.81/serde_json/error/struct.Error.html" title="struct serde_json::error::Error">SerdeJsonError</a>)</code></h3><h3 id="variant.SystemError" class="variant small-section-header"><a href="#variant.SystemError" class="anchor field"></a><code>SystemError</code></h3><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor"></a></h2><div id="trait-implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Debug" class="impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#impl-Debug" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#method.fmt" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt" class="fnname">fmt</a>(&amp;self, f: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.61.0/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>&lt;'_&gt;) -&gt; <a class="type" href="https://doc.rust-lang.org/1.61.0/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></h4></section></summary><div class='docblock'><p>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt">Read more</a></p>
}</code></pre></div><h2 id="variants" class="variants small-section-header">Variants<a href="#variants" class="anchor"></a></h2><h3 id="variant.Unauthorized" class="variant small-section-header"><a href="#variant.Unauthorized" class="anchor field"></a><code>Unauthorized</code></h3><h3 id="variant.Http" class="variant small-section-header"><a href="#variant.Http" class="anchor field"></a><code>Http(<a class="struct" href="struct.StatusCode.html" title="struct kanidm_client::StatusCode">StatusCode</a>,&nbsp;<a class="enum" href="https://doc.rust-lang.org/1.61.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;OperationError&gt;,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.Transport" class="variant small-section-header"><a href="#variant.Transport" class="anchor field"></a><code>Transport(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>)</code></h3><h3 id="variant.AuthenticationFailed" class="variant small-section-header"><a href="#variant.AuthenticationFailed" class="anchor field"></a><code>AuthenticationFailed</code></h3><h3 id="variant.EmptyResponse" class="variant small-section-header"><a href="#variant.EmptyResponse" class="anchor field"></a><code>EmptyResponse</code></h3><h3 id="variant.TotpVerifyFailed" class="variant small-section-header"><a href="#variant.TotpVerifyFailed" class="anchor field"></a><code>TotpVerifyFailed(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>,&nbsp;TotpSecret)</code></h3><h3 id="variant.TotpInvalidSha1" class="variant small-section-header"><a href="#variant.TotpInvalidSha1" class="anchor field"></a><code>TotpInvalidSha1(<a class="struct" href="https://docs.rs/uuid/1.1.2/uuid/struct.Uuid.html" title="struct uuid::Uuid">Uuid</a>)</code></h3><h3 id="variant.JsonDecode" class="variant small-section-header"><a href="#variant.JsonDecode" class="anchor field"></a><code>JsonDecode(<a class="struct" href="https://docs.rs/reqwest/0.11.10/reqwest/error/struct.Error.html" title="struct reqwest::error::Error">Error</a>,&nbsp;<a class="struct" href="https://doc.rust-lang.org/1.61.0/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>)</code></h3><h3 id="variant.JsonEncode" class="variant small-section-header"><a href="#variant.JsonEncode" class="anchor field"></a><code>JsonEncode(<a class="struct" href="https://docs.rs/serde_json/1.0.81/serde_json/error/struct.Error.html" title="struct serde_json::error::Error">SerdeJsonError</a>)</code></h3><h3 id="variant.SystemError" class="variant small-section-header"><a href="#variant.SystemError" class="anchor field"></a><code>SystemError</code></h3><h2 id="trait-implementations" class="small-section-header">Trait Implementations<a href="#trait-implementations" class="anchor"></a></h2><div id="trait-implementations-list"><details class="rustdoc-toggle implementors-toggle" open><summary><section id="impl-Debug" class="impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#impl-Debug" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl has-srclink"><span class="rightside"><a class="srclink" href="../src/kanidm_client/lib.rs.html#50">source</a></span><a href="#method.fmt" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt" class="fnname">fmt</a>(&amp;self, f: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.61.0/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>&lt;'_&gt;) -&gt; <a class="type" href="https://doc.rust-lang.org/1.61.0/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></h4></section></summary><div class='docblock'><p>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/1.61.0/core/fmt/trait.Debug.html#tymethod.fmt">Read more</a></p>
</div></details></div></details></div><h2 id="synthetic-implementations" class="small-section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor"></a></h2><div id="synthetic-implementations-list"><section id="impl-RefUnwindSafe" class="impl has-srclink"><a href="#impl-RefUnwindSafe" class="anchor"></a><h3 class="code-header in-band">impl !<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-Send" class="impl has-srclink"><a href="#impl-Send" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-Sync" class="impl has-srclink"><a href="#impl-Sync" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-Unpin" class="impl has-srclink"><a href="#impl-Unpin" class="anchor"></a><h3 class="code-header in-band">impl <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section><section id="impl-UnwindSafe" class="impl has-srclink"><a href="#impl-UnwindSafe" class="anchor"></a><h3 class="code-header in-band">impl !<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a> for <a class="enum" href="enum.ClientError.html" title="enum kanidm_client::ClientError">ClientError</a></h3></section></div><h2 id="blanket-implementations" class="small-section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor"></a></h2><div id="blanket-implementations-list"><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Any" class="impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/any.rs.html#132-136">source</a></span><a href="#impl-Any" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/any/trait.Any.html" title="trait core::any::Any">Any</a> for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/any.rs.html#133">source</a></span><a href="#method.type_id" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/any/trait.Any.html#tymethod.type_id" class="fnname">type_id</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.61.0/core/any/struct.TypeId.html" title="struct core::any::TypeId">TypeId</a></h4></section></summary><div class='docblock'><p>Gets the <code>TypeId</code> of <code>self</code>. <a href="https://doc.rust-lang.org/1.61.0/core/any/trait.Any.html#tymethod.type_id">Read more</a></p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-Borrow%3CT%3E" class="impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#209-214">source</a></span><a href="#impl-Borrow%3CT%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;T&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · <a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#211">source</a></span><a href="#method.borrow" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.Borrow.html#tymethod.borrow" class="fnname">borrow</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.61.0/std/primitive.reference.html">&amp;</a>T</h4></section></summary><div class='docblock'><p>Immutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.Borrow.html#tymethod.borrow">Read more</a></p>
</div></details></div></details><details class="rustdoc-toggle implementors-toggle"><summary><section id="impl-BorrowMut%3CT%3E" class="impl has-srclink"><span class="rightside"><a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#218-222">source</a></span><a href="#impl-BorrowMut%3CT%3E" class="anchor"></a><h3 class="code-header in-band">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a>&lt;T&gt; for T <span class="where fmt-newline">where<br>&nbsp;&nbsp;&nbsp;&nbsp;T: ?<a class="trait" href="https://doc.rust-lang.org/1.61.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,&nbsp;</span></h3></section></summary><div class="impl-items"><details class="rustdoc-toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl has-srclink"><span class="rightside"><span class="since" title="const unstable">const: <a href="https://github.com/rust-lang/rust/issues/91522" title="Tracking issue for const_borrow">unstable</a></span> · <a class="srclink" href="https://doc.rust-lang.org/1.61.0/src/core/borrow.rs.html#219">source</a></span><a href="#method.borrow_mut" class="anchor"></a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut" class="fnname">borrow_mut</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.61.0/std/primitive.reference.html">&amp;mut </a>T</h4></section></summary><div class='docblock'><p>Mutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.61.0/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut">Read more</a></p>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long