IdentityServer4 授权配置AllowedScopes实例
1. 业务场景
IdentityServer4 授权配置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
都可以访问。
Atas ialah kandungan terperinci IdentityServer4 授权配置AllowedScopes实例. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Apabila kami tidak lagi mahu menggunakan Edisi Perkhidmatan Jangka Panjang Win10 Enterprise 2016, kami boleh memilih untuk beralih kepada Edisi Profesional Kaedahnya juga sangat mudah. Kami hanya perlu menukar beberapa kandungan dan memasang imej sistem. Cara menukar versi perkhidmatan jangka panjang win10 enterprise 2016 kepada versi profesional 1. Tekan win+R, dan kemudian masukkan "regedit" 2. Tampal laluan berikut terus dalam bar alamat di atas: Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT \CurrentVersion3 , kemudian cari EditionID dan gantikan kandungan dengan "profesional" untuk mengesahkan

Cara menggunakan Flask-Security untuk melaksanakan pengesahan dan kebenaran pengguna Pengenalan: Dalam aplikasi web moden, pengesahan dan kebenaran pengguna adalah fungsi penting. Untuk memudahkan proses ini, Flask-Security ialah sambungan yang sangat berguna yang menyediakan satu siri alatan dan fungsi untuk menjadikan pengesahan dan kebenaran pengguna mudah dan mudah. Artikel ini akan memperkenalkan cara menggunakan Flask-Security untuk melaksanakan pengesahan dan kebenaran pengguna. 1. Pasang sambungan Flask-Security: pada permulaan

UniApp melaksanakan analisis terperinci log masuk dan kebenaran pengguna Dalam pembangunan aplikasi mudah alih moden, log masuk dan kebenaran pengguna adalah fungsi penting. Sebagai rangka kerja pembangunan merentas platform, UniApp menyediakan cara yang mudah untuk melaksanakan log masuk dan kebenaran pengguna. Artikel ini akan meneroka butiran log masuk dan kebenaran pengguna dalam UniApp, dan melampirkan contoh kod yang sepadan. 1. Pelaksanaan fungsi log masuk pengguna Cipta halaman log masuk Fungsi log masuk pengguna biasanya memerlukan halaman log masuk, yang mengandungi borang untuk pengguna memasukkan nombor akaun dan kata laluan mereka dan butang log masuk

Douyin, sebagai platform media sosial yang popular pada masa ini, bukan sahaja menyediakan orang ramai dengan banyak kandungan hiburan, tetapi juga telah menjadi saluran penting bagi banyak jenama dan peniaga untuk mempromosikan produk dan mencapai jualan. Antaranya, produk menghiris dan menjual Douyin telah menjadi kaedah pemasaran yang baru dan cekap. Jadi, bagaimana anda mendapatkan kebenaran untuk produk hirisan Douyin 1. Bagaimanakah anda mendapatkan kebenaran untuk produk hirisan Douyin menguraikan video panjang menjadi klip video pendek dan membenamkan maklumat promosi produk ke dalamnya untuk menarik penonton? untuk membeli. . Apabila menghiris dan menjual barang di Douyin, langkah pertama ialah mendapatkan kebenaran video asal. Apabila mencari pemberi lesen yang sesuai, anda boleh mempertimbangkan untuk menggunakan pelbagai saluran seperti platform Douyin, media sosial dan forum industri. Cari pencipta atau pemegang hak cipta dengan kandungan video popular dan berhubung secara aktif dengan mereka,

Cara menggunakan JWT untuk melaksanakan pengesahan dan kebenaran dalam aplikasi PHP Pengenalan: Dengan perkembangan pesat Internet, pengesahan dan kebenaran menjadi semakin penting dalam aplikasi web. JSONWebToken (JWT) ialah mekanisme pengesahan dan kebenaran popular yang digunakan secara meluas dalam aplikasi PHP. Artikel ini akan memperkenalkan cara menggunakan JWT untuk melaksanakan pengesahan dan kebenaran dalam aplikasi PHP, dan menyediakan contoh kod untuk membantu pembaca memahami penggunaan JWT dengan lebih baik. 1. Pengenalan kepada JWTJSONWebTo

Dengan penggunaan aplikasi web yang meluas, keselamatan dan perlindungan data telah menjadi isu penting dalam pembangunan aplikasi web. Untuk memastikan keselamatan aplikasi web, pengesahan dan kebenaran pengguna diperlukan. Sebagai rangka kerja pembangunan web yang popular, Flask menyediakan banyak mekanisme untuk melaksanakan pengesahan dan kebenaran pengguna. Pengesahan Pengguna Pengesahan pengguna merujuk kepada menggunakan kaedah pengesahan tertentu untuk menentukan sama ada identiti pengguna adalah sah apabila pengguna mengakses aplikasi web. Flask menawarkan banyak

Terdapat banyak perisian tulen untuk melindungi hak harta intelek mereka sendiri Sebelum menggunakan perisian, pengguna mesti mendapatkan beberapa kebenaran dan mendapatkan kebenaran daripada pembangun sebelum mereka boleh menggunakannya. Sesetengah perisian mempunyai tempoh percubaan Selepas tempoh ini, anda perlu mendapatkan kebenaran semula sebelum anda boleh menggunakannya seperti biasa. Jika wps menggesa bahawa kebenaran telah tamat tempoh, kami tidak boleh melakukan sebarang operasi. Bagaimana untuk menyelesaikan masalah ini, mari kita lihat penjelasan di bawah. 1. Saya membuka program teks WPS dan klik pada kotak merah dalam gambar di atas, seperti yang ditunjukkan dalam gambar di bawah. 2. Klik Configuration and Repair Tools. 3. Pilih "Lanjutan" seperti yang ditunjukkan dalam rajah di bawah. 4. Klik pusat pengurusan produk untuk memadam kandungan gesaan "Tamat tempoh", seperti yang ditunjukkan dalam rajah di bawah. 5. Selepas mengklik "Tambah", masukkan nombor siri, seperti yang ditunjukkan dalam rajah di bawah. 6. Kemudian dahulu

Bagaimana untuk melaksanakan fungsi pengesahan dan kebenaran pengguna melalui rangka kerja Webman? Webman ialah rangka kerja web ringan berdasarkan Python, yang menyediakan fungsi yang kaya dan kebolehskalaan yang fleksibel. Dalam pembangunan, pengesahan dan kebenaran pengguna adalah fungsi yang sangat penting Artikel ini akan memperkenalkan cara menggunakan rangka kerja Webman untuk melaksanakan fungsi ini. Pasang Webman Pertama, kita perlu memasang Webman. Anda boleh menggunakan arahan pip untuk memasang: pipinstallwebman
