首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dotnet核心3.1和角9的AAD注册

Dotnet核心3.1和角9的AAD注册
EN

Stack Overflow用户
提问于 2020-03-05 08:51:59
回答 2查看 1.5K关注 0票数 0

我需要建立一个简单的spa (角9)应用程序与dotnet核心3.1在后面的Azure Active注册。是否有文档或教程如何使dotnet核心+角+ AAD成为简单的应用程序?

我已经找到了具有角、dotnet和MSAL的AAD这篇文章,但今天似乎并不是真的。

我注册了两次应用程序注册(如本文所示),并使用了示例中的客户端应用程序

我的app.module.ts包含:

代码语言:javascript
复制
function MSALConfigFactory(): Configuration {
  return {
    auth: {
      clientId: '<client-id-of-frontend-app-registration>',
      authority: "https://login.microsoftonline.com/<tenant-id>",
      validateAuthority: true
      // redirectUri: "http://localhost:4200/",
      // postLogoutRedirectUri: "http://localhost:4200/",
      // navigateToLoginRequestUrl: true,
    },
    cache: {
      cacheLocation: "localStorage",
      storeAuthStateInCookie: isIE, // set to true for IE 11
    },
  };
}

之后,我通过以下方式创建了后端项目:

代码语言:javascript
复制
dotnet new webapi --client-id <client-id-of-backend-app-registration> --tenant-id <tenant-id> --domain microsoft.onmicrosoft.com --auth SingleOrg

在后端项目中添加了角应用程序,就像这样:

代码语言:javascript
复制
dotnet new angular

因此,appsettings.json包含:

代码语言:javascript
复制
{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/ ",
    "Domain": "microsoft.onmicrosoft.com",
    "TenantId": "<tenant-id>",
    "ClientId": "<client-id-of-backend-app-registration>"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}

当我运行这个项目时,我点击“登录”,一切都正常,然后通过注入的HTTPClients的所有请求都包含更多的令牌。

但是当我调用任何被标记为授权的控制器时,它总是返回401。

所以,也许有些步骤包含错误?或者有文档或教程如何使dotnet核心+角+ AAD是一个简单的应用程序?至少对于另一个版本的dotnet和角,但不太老。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-06 02:46:47

您应该获得访问令牌在角应用程序访问您的web应用程序。

注册web应用程序时,配置Expose an APIAdd a Scope (如:api://<cliendID>/api-access ),并在.net核心web应用程序中将ClientId设置为api://<clientid>

在角度应用程序方面,可以将consentScopes设置为包含web的作用域:

consentScopes: [ "api://<clientid>/api-access" ]

  • consentScopes:允许客户端表示需要同意的范围。作用域可以来自多个资源/端点。在这里传递作用域只会同意它,在客户端真正调用API之前,将不会获得访问令牌。

并将protectedResourceMap设置为包含获取访问令牌的api范围:

  • protectedResourceMap:将资源映射到范围{"https://graph.microsoft.com/v1.0/me“、"user.read”、"mail.send"}。MSAL内部用于在webApi调用中自动附加令牌。这仅适用于CORS呼叫。

例如:export const protectedResourceMap:[string, string[]][]=[['https://localhost:44388/api/values', ['api://59b02905-8b6b-4665-a702-321e97392416/api-access']] ];

您可以查看角文档的MSAL以获得更多详细信息。此代码示例是角9的。您可以通过更新app.module.ts中的信任来修改代码示例。

更新:

您正在使用AzureADV2.0,所以在web中验证令牌时,管理局应该添加/v2.0

代码语言:javascript
复制
services.AddAuthentication(AzureADDefaults.JwtBearerAuthenticationScheme)
.AddAzureADBearer(options => Configuration.Bind("AzureAd", options));

services.Configure<JwtBearerOptions>(AzureADDefaults.JwtBearerAuthenticationScheme, options =>
{
    // This is a Microsoft identity platform web API.
    options.Authority += "/v2.0";

    // The web API accepts as audiences both the Client ID (options.Audience) and api://{ClientID}.
    options.TokenValidationParameters.ValidAudiences = new []
    {
     options.Audience,
     $"api://{options.Audience}"
    };


}); 
票数 2
EN

Stack Overflow用户

发布于 2020-03-18 13:16:56

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60541368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档