目次
1. ビジネス シナリオ
2. 解决方案
ホームページ バックエンド開発 C#.Net チュートリアル IdentityServer4 認証構成AllowedScopes インスタンス

IdentityServer4 認証構成AllowedScopes インスタンス

Jun 24, 2017 am 10:48 AM
承認する

1. ビジネス シナリオ

IdentityServer4 認可設定 ClientAllowedScopes は、ユーザーが設定した 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,现在就会出现两种情况:

  1. 前台Client和后台Client,都需要授权后访问api/values接口:没有问题。

  2. 前台Client不需要授权后访问,后台Client需要授权后访问:有问题,前台Client没办法访问了,因为api/values接口设置了Authorize()

其实,说明白些,就是该如何让 API 服务指定Client授权访问?比如:[Authorize(ClientId = &#39;client_id_1&#39;)]

2. 解决方案

没有[Authorize(ClientId = &#39;client_id_1&#39;)]这种解决方式,不过可以使用[Authorize(Roles = &#39;admin&#39;)]

授权中心的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

rrreee
上記の 2 つの api_name1 設定は、認証センターの scope 設定は API サービス全体です。フロントエンドとバックエンドなどの複数の <code>Client 設定があり、両方が api_name1 にアクセスする必要がある場合、いくつかの問題が発生します。が発生します。 🎜🎜たとえば、api_name1 サービスのインターフェイス サービス設定コード: 🎜
rrreee
🎜Authorize() 設定と説明認証センターが 2 つの クライアント (フロントエンドとバックエンド) および scope で構成されている場合は、認証後に api/values インターフェイスにアクセスする必要があります。どちらにも api_name1 が含まれており、次の 2 つの状況が発生します: 🎜
  1. 🎜フォアグラウンド Client とバックグラウンド Client code> では、すべて <code>api/values インターフェイスへのアクセスを許可する必要がありますが、問題ありません。 🎜
  2. 🎜フロントエンド クライアント にはアクセスするための承認が必要ありませんが、バックエンド クライアント にはアクセスするための承認が必要です: 問題があります、フロントエンドの Client api/values インターフェイスが Authorize() で設定されているため、アクセスする方法がありません。 🎜
🎜実際、よりわかりやすく説明すると、API サービスに Client を指定してアクセスを許可するにはどうすればよいでしょうか?例: [Authorize(ClientId = 'client_id_1')]。 🎜🎜2. 解決策🎜🎜 [Authorize(ClientId = 'client_id_1')] のような解決策はありませんが、[Authorize(Roles = 'admin')] を使用できます。 >。 🎜🎜認証センターの ResourceOwnerPasswordValidator コードは次のように変更されます: 🎜
rrreee
🎜 認証センターの startup 構成は次のように変更されます🎜rrreee🎜API サービス インターフェイスは、次のように設定するだけで済みます: 🎜
rrreee
🎜注意が必要ですつまり、api/values code> インターフェイスは特定の <code>Role を設定しませんが、各 Role にはアクセスできます。 🎜

以上がIdentityServer4 認証構成AllowedScopes インスタンスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

win10エンタープライズ版2016長期サービス版をプロフェッショナル版にアップグレードする方法 win10エンタープライズ版2016長期サービス版をプロフェッショナル版にアップグレードする方法 Jan 03, 2024 pm 11:26 PM

現在の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 を使用してユーザー認証と認可を実装する方法 Flask-Security を使用してユーザー認証と認可を実装する方法 Aug 04, 2023 pm 02:40 PM

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

UniApp はユーザーのログインと認可の詳細な分析を実装します UniApp はユーザーのログインと認可の詳細な分析を実装します Jul 05, 2023 pm 11:54 PM

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

Douyin スライスと商品の認可を取得するにはどうすればよいですか?抖音スライスは簡単に作れますか? Douyin スライスと商品の認可を取得するにはどうすればよいですか?抖音スライスは簡単に作れますか? Mar 07, 2024 pm 10:52 PM

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

JWT を使用して PHP アプリケーションに認証と認可を実装する方法 JWT を使用して PHP アプリケーションに認証と認可を実装する方法 Aug 03, 2023 pm 10:17 PM

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

Flask でのユーザー認証と認可 Flask でのユーザー認証と認可 Jun 17, 2023 pm 06:02 PM

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

WPS 認証が期限切れになり、テキストを入力できない場合はどうすればよいですか? WPS 認証が期限切れになり、テキストを入力できない場合はどうすればよいですか? Mar 20, 2024 am 09:00 AM

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

Webman フレームワークを介してユーザー認証および認可機能を実装するにはどうすればよいですか? Webman フレームワークを介してユーザー認証および認可機能を実装するにはどうすればよいですか? Jul 07, 2023 am 09:21 AM

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

See all articles