JWTまたは参照トークンを使用していますか?
参照トークンは、権限を保持するIdentity-serverによって検証されます。異なるIDサーバーを使用して、別のIDサーバーを使用して、それを検証するサーバー以外のユーザーが提供したトークンを確認することは難しいかもしれません。 JWTを使用している場合は、Discovery-Endpointを使用して公開鍵を取得できます。そして、あなたはあなたがこのような操作を行うことができます...
署名を検証するためにこれを使用することができるはずです。
// Define the client to access the IdentityServer Discovery-Endpoint
var discos = new DiscoveryClient(ConfigurationManager.AppSettings["IdentityserverLocation"]);
var disco = await discos.GetAsync();
// get the public key from the discovery-endpoint
var keys = disco.KeySet.Keys;
//Build the authorization request
//param: Disco.AuthorizeEndpoint --> retrieves the authorization url from the identityserver
var request = new AuthorizeRequest(disco.AuthorizeEndpoint);
var url = request.CreateAuthorizeUrl(
clientId: ConfigurationManager.AppSettings["ClientId"],
responseType: "id_token",
scope: "openid profile email",
responseMode: OidcConstants.ResponseModes.FormPost,
redirectUri: ConfigurationManager.AppSettings["RedirectUrl"],
state: CryptoRandom.CreateUniqueId(),
nonce: CryptoRandom.CreateUniqueId());
//Try to initiate validation
try
{
// Check if the token data exists in the request, parse is to a correct token
var idToken = Request.Form.Get("id_token");
JwtSecurityToken j = new JwtSecurityToken(idToken);
var keylist = new List<SecurityKey>();
foreach (var webKey in disco.KeySet.Keys)
{
var exp = Base64Url.Decode(webKey.E);
var mod = Base64Url.Decode(webKey.N);
var key = new RsaSecurityKey(new RSAParameters() { Modulus = mod, Exponent = exp });
keylist.Add(key);
}
//define the parameters for validation of the token
var parameters = new TokenValidationParameters
{
ValidIssuer = disco.Issuer,
ValidAudience = "viper",
IssuerSigningKeys = keylist,
};
var handler = new JwtSecurityTokenHandler();
handler.InboundClaimTypeMap.Clear();
//validate the token using the defined parameters, return the token when validation is succesful
var user = handler.ValidateToken(j.RawData, parameters, out var validatedtoken);
認証用のIDサーバを使用するようにリソースサーバを設定する場合、次のようなものを指定する必要がありますスコープと権限...あなたのIDサーバーはすべてURIと同じ「権限」を持っていますか? – Mashton
Apiリソースの "Auhority"を単一のURIに設定する必要があるので、これに対する答えを見てみたいと思います...同じIdentity Serverインスタンスを指し示す2つのドメイン名を使用しても同様の状況です。 –