IdentityServer4 認証構成AllowedScopes インスタンス
1. ビジネス シナリオ
IdentityServer4 認可設定 Client
の AllowedScopes
は、ユーザーが設定した ApiName コードである特定の API サイト名を設定します。 . code>、サンプル コード: <code>Client
中的AllowedScopes
,设置的是具体的 API 站点名字,也就是使用方设置的ApiName
,示例代码:
//授权中心配置new Client { ClientId = "client_id_1", AllowedGrantTypes = GrantTypes.ResourceOwnerPassword, AllowOfflineAccess = true, AccessTokenLifetime = 3600 * 6, //6小时SlidingRefreshTokenLifetime = 1296000, //15天ClientSecrets = {new Secret("secret".Sha256()) }, AllowedScopes = {"api_name1"}, }//API 服务配置app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions { Authority = $"http://localhost:5000", ApiName = "api_name1", RequireHttpsMetadata = false});
上面两个api_name1
配置要一致,问题来了,因为授权中心的scope
配置是整个 API 服务,如果我们存在多个Client
配置,比如一个前台和后台,然后都需要访问api_name1
,就会出现一些问题。
比如,api_name1
服务中的一个接口服务配置代码:
[Authorize()] [Route("api/values")] [HttpGet]public IActionResult Get() {return Ok(); }
Authorize()
的配置,说明api/values
接口需要授权后访问,如果授权中心配置了两个Client
(前台和后台),并且scope
都包含了api_name1
,现在就会出现两种情况:
前台
Client
和后台Client
,都需要授权后访问api/values
接口:没有问题。前台
Client
不需要授权后访问,后台Client
需要授权后访问:有问题,前台Client
没办法访问了,因为api/values
接口设置了Authorize()
。
其实,说明白些,就是该如何让 API 服务指定Client
授权访问?比如:[Authorize(ClientId = 'client_id_1')]
。
2. 解决方案
没有[Authorize(ClientId = 'client_id_1')]
这种解决方式,不过可以使用[Authorize(Roles = 'admin')]
。
授权中心的ResourceOwnerPasswordValidator
代码,修改如下:
public class ResourceOwnerPasswordValidator : IResourceOwnerPasswordValidator {private readonly IUserService _userService;public ResourceOwnerPasswordValidator(IUserService userService) { _userService = userService; }public async Task ValidateAsync(ResourceOwnerPasswordValidationContext context) {var user = await _userService.Login(context.UserName, context.Password);if (user != null) {var claims = new List<Claim>() { new Claim("role", "admin") }; //根据 user 对象,设置不同的 rolecontext.Result = new GrantValidationResult(user.UserId.ToString(), OidcConstants.AuthenticationMethods.Password, claims); } } }
授权中心的startup
配置,修改如下
var builder = services.AddIdentityServer(); builder.AddTemporarySigningCredential()//.AddInMemoryIdentityResources(Config.GetIdentityResources()).AddInMemoryApiResources(new List<ApiResource> {new ApiResource("api_name1", "api1"){ UserClaims = new List<string> {"role"}}, //增加 role claimnew ApiResource("api_name2", "api2"){ UserClaims = new List<string> {"role"}} }) .AddInMemoryClients(Config.GetClients());
API 服务接口,只需要配置如下:
[Authorize()] [Route("api/values")] [HttpGet]public IActionResult Get() {return Ok(); } [Authorize(Roles = "admin")] [Route("api/values2")] [HttpGet]public IActionResult Get2() {return Ok(); } [Authorize(Roles = "admin,normal")] [Route("api/values3")] [HttpGet]public IActionResult Get3() {return Ok(); }
需要注意的是,api/values
接口虽然没有设置具体的Roles
,但每个Role
api_name1
設定は、認証センターの scope 設定は API サービス全体です。フロントエンドとバックエンドなどの複数の <code>Client
設定があり、両方が api_name1
にアクセスする必要がある場合、いくつかの問題が発生します。が発生します。 🎜🎜たとえば、api_name1
サービスのインターフェイス サービス設定コード: 🎜Authorize()
設定と説明認証センターが 2 つの クライアント
(フロントエンドとバックエンド) および scope
で構成されている場合は、認証後に api/values
インターフェイスにアクセスする必要があります。どちらにも api_name1 が含まれており、次の 2 つの状況が発生します: 🎜- 🎜フォアグラウンド
Client
とバックグラウンドClient code> では、すべて <code>api/values
インターフェイスへのアクセスを許可する必要がありますが、問題ありません。 🎜 - 🎜フロントエンド
クライアント
にはアクセスするための承認が必要ありませんが、バックエンドクライアント
にはアクセスするための承認が必要です: 問題があります、フロントエンドのClient
api/values
インターフェイスがAuthorize()
で設定されているため、アクセスする方法がありません。 🎜
Client
を指定してアクセスを許可するにはどうすればよいでしょうか?例: [Authorize(ClientId = 'client_id_1')]
。 🎜🎜2. 解決策🎜🎜 [Authorize(ClientId = 'client_id_1')]
のような解決策はありませんが、[Authorize(Roles = 'admin')]
を使用できます。 >。 🎜🎜認証センターの ResourceOwnerPasswordValidator
コードは次のように変更されます: 🎜startup
構成は次のように変更されます🎜rrreee🎜API サービス インターフェイスは、次のように設定するだけで済みます: 🎜api/values code> インターフェイスは特定の <code>Role
を設定しませんが、各 Role
にはアクセスできます。 🎜以上がIdentityServer4 認証構成AllowedScopes インスタンスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









現在のWin10 Enterprise Edition 2016 長期サービス版を継続利用したくない場合は、一部の内容を変更してシステムイメージをインストールするだけで、Professional Editionに切り替えることができます。 win10 エンタープライズ バージョン 2016 長期サービス バージョンをプロフェッショナル バージョンに変更する方法 1. win + R キーを押し、「regedit」と入力します。 2. 次のパスを上のアドレス バーに直接貼り付けます: Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT \CurrentVersion3 に移動し、EditionID を見つけて内容を「professional」に置き換えて確認します。

Flask-Security を使用してユーザー認証と認可を実装する方法 はじめに: 最新の Web アプリケーションでは、ユーザー認証と認可は不可欠な機能です。このプロセスを簡素化するために、Flask-Security はユーザーの認証と認可を簡単かつ便利にする一連のツールと機能を提供する非常に便利な拡張機能です。この記事では、Flask-Security を使用してユーザーの認証と認可を実装する方法を紹介します。 1. Flask-Security 拡張機能をインストールします: 最初に

UniApp のユーザー ログインと承認の実装の詳細な分析 最新のモバイル アプリケーション開発では、ユーザーのログインと承認は不可欠な機能です。クロスプラットフォーム開発フレームワークとして、UniApp はユーザーのログインと認可を実装する便利な方法を提供します。この記事では、UniApp でのユーザーのログインと認証の詳細を説明し、対応するコード例を添付します。 1. ユーザーログイン機能の実装 ログインページの作成 ユーザーログイン機能には通常、ユーザーがアカウント番号とパスワードを入力するフォームとログインボタンを含むログインページが必要です。

Douyin は現在人気のソーシャル メディア プラットフォームとして、人々に豊富なエンターテイメント コンテンツを提供するだけでなく、多くのブランドや販売者にとって製品を宣伝し、販売を達成するための重要なチャネルとなっています。その中でも、Douyinの商品をスライスして販売することは、斬新で効率的なマーケティング手法となっています。では、Douyin のスライス製品の認可はどうやって取得しますか? 1. Douyin のスライス製品はどうやって認可を取得しますか? Douyin のスライス製品は、長いビデオを短いビデオ クリップに分解し、そこに製品のプロモーション情報を埋め込んで視聴者を引き付けます。買う。 。 Douyin で商品をスライスして販売する場合、最初のステップは元のビデオから許可を取得することです。適切なライセンサーを探す場合は、Douyin プラットフォーム、ソーシャル メディア、業界フォーラムなどのさまざまなチャネルの利用を検討できます。人気の動画コンテンツのクリエイターや著作権者を見つけて積極的につながり、

JWT を使用して PHP アプリケーションに認証と認可を実装する方法 はじめに: インターネットの急速な発展に伴い、Web アプリケーションにおける認証と認可の重要性がますます高まっています。 JSONWebToken (JWT) は、PHP アプリケーションで広く使用されている一般的な認証および認可メカニズムです。この記事では、JWT を使用して PHP アプリケーションに認証と認可を実装する方法を紹介し、読者が JWT の使用法をより深く理解できるようにコード例を示します。 1. JWT JSONWebTo の概要

Web アプリケーションの普及に伴い、Web アプリケーション開発におけるセキュリティとデータ保護が重要な問題となっています。 Web アプリケーションのセキュリティを確保するには、ユーザーの認証と認可が必要です。人気のある Web 開発フレームワークとして、Flask はユーザーの認証と認可を実装するための多くのメカニズムを提供します。ユーザー認証 ユーザー認証とは、ユーザーが Web アプリケーションにアクセスするときに、ユーザーの ID が正当であるかどうかを特定の認証方法を使用して判断することを指します。 Flask には多くの機能があります

正規のソフトウェアの中には、自社の知的財産権を保護するために、ソフトウェアを使用する前に何らかの認可を取得し、開発者から許可を得る必要があるものが多くあります。一部のソフトウェアには試用期間が設けられており、その期間を過ぎると、正常に使用できるようにするために再認証を取得する必要があります。 wps が認証の有効期限が切れていることを示すプロンプトを表示した場合、いかなる操作も実行できません。この問題を解決する方法については、以下の説明を見てみましょう。 1. 下の図に示すように、WPS テキスト プログラムを開き、上の図の赤いボックスをクリックしました。 2. 「構成および修復ツール」をクリックします。 3. 以下の図に示すように、「詳細」を選択します。 4. 次の図に示すように、製品管理センターをクリックし、「期限切れ」プロンプトの内容を削除します。 5. 「追加」をクリックした後、下図に示すようにシリアル番号を入力します。 6. それではまず

Webman フレームワークを介してユーザー認証および認可機能を実装するにはどうすればよいですか? Webman は、豊富な機能と柔軟な拡張性を備えた Python ベースの軽量 Web フレームワークです。開発においてユーザーの認証と認可は非常に重要な機能ですが、本記事ではこれらの機能をWebmanフレームワークを利用して実装する方法を紹介します。 Webman のインストール まず、Webman をインストールする必要があります。 pip コマンドを使用してインストールできます: pipinstallwebman
