Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular SPA和守护程序应用程序的jwt令牌中的不同受众_Angular_Azure_Asp.net Core_Azure Active Directory_Adal.js - Fatal编程技术网

Angular SPA和守护程序应用程序的jwt令牌中的不同受众

Angular SPA和守护程序应用程序的jwt令牌中的不同受众,angular,azure,asp.net-core,azure-active-directory,adal.js,Angular,Azure,Asp.net Core,Azure Active Directory,Adal.js,我有一个dotnet core 1.1 web API,受Azure AD保护。我的Angular SPA使用adal对用户进行身份验证。我还有一个守护程序应用程序,它执行一些后台工作,它还使用web api调用功能或检索数据 这主要是基于微软提供的样本,你可以找到 最大的区别是我使用的是不同的中间件。API使用JWTBeareAuthentication .UseJWTBeareAuthentication(新的JWTBeareOptions { TokenValidationParamete

我有一个dotnet core 1.1 web API,受Azure AD保护。我的Angular SPA使用adal对用户进行身份验证。我还有一个守护程序应用程序,它执行一些后台工作,它还使用web api调用功能或检索数据

这主要是基于微软提供的样本,你可以找到

最大的区别是我使用的是不同的中间件。API使用JWTBeareAuthentication

.UseJWTBeareAuthentication(新的JWTBeareOptions
{
TokenValidationParameters=tokenValParam,
自动验证=真,
自动挑战=错误,
Authority=String.Format(配置[“AzureAd:AadInstance”]、配置[“AzureAd:Tenant”]),
观众=配置[“AzureAd:观众”],
})
守护程序应用程序中的令牌由以下代码创建:

var authContext=新的AuthenticationContext(“https://login.microsoftonline.com/##adId##);
var clientCredential=new clientCredential(“##serviceCredentialSecret”)、“###serviceCredentialSecret#”;
var result=await authContext.AcquireTokenAsync(##webapuri###,clientCredential);

我面临的问题是,AD通过adal为SPA生成的令牌将客户端应用程序的clientId作为访问群体。为守护程序应用程序生成的令牌没有clientId作为访问群体,而是web api的uri。无法在中间件中指定多个有效访问群体。我应该使用自己的va吗lidator,是有一个内置的机制来解决这个问题,还是我完全没有抓住要点。

我能想到的最简单的方法是尝试将所有客户端应用程序设置为使用同一个(观众),客户端ID或api url。在后台程序应用程序中为web api获取令牌时,您可以使用客户端ID作为资源,web api接受客户端ID作为已验证的访问群体。如果您希望在web api中支持多个访问群体,您需要编写自己的验证程序。

我能想到的最简单的方法是尝试设置所有的cl客户端应用程序使用相同的一个(访问群体)、客户端ID或api url。在守护程序应用程序中获取web api的令牌时,您可以使用客户端ID作为资源,web api接受客户端ID作为已验证的访问群体。如果要在web api中支持多个访问群体,则需要编写自己的验证程序