如何在AAD中获取下游服务的令牌

Mvd*_*vdD 3 c# authentication azure azure-active-directory adal

我有一个MVC应用程序,我用它OpenIdConnectAuthenticationMiddleware来验证用户对AAD.此MVC应用程序使用一些需要用户身份验证上下文的后端服务.

如果我在AAD中单独注册这些服务,我可以使用它来获取令牌 AuthenticationContext.AcquireTokenSilentAsync.但是,使用AAD单独注册这些服务似乎是错误的,因为它们需要用户单独同意它们(它们实际上是应用程序的一部分).

因此,当用户进行身份验证时,我想使用从AAD获得的JWT令牌,并将其用作承载令牌以调用下游服务.我意识到这些服务需要与MVC应用程序具有相同的受众.

但是我如何获得JWT令牌.ClaimPrincipal的第一个标识没有引导上下文.

小智 7

请注意,让您的服务承认具有相同受众群体的令牌会让您受到令牌转发攻击.我不建议这样做.此外,同意应该在单个页面中进行并且只需单击一次 - 因此就用户影响而言,没有太大差异.那就是说.如果您确实设置了它,则可以通过将标志切换为true来强制在bootstrapcontext中存在令牌SaveSignInToken.看到

app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = clientId,
                Authority = authority,
                TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters{SaveSigninToken=true},
                PostLogoutRedirectUri = postLogoutRedirectUri
            });
Run Code Online (Sandbox Code Playgroud)