【问题标题】:AspNetCore Web Api Microsoft Account AuthenticationAspNetCore Web Api 微软账户认证
【发布时间】:2019-05-30 22:45:51
【问题描述】:

我的基本要求是公开一些 REST 资源的 Web Api。访问任何资源都需要身份验证,我希望通过 Microsoft 帐户来实现。这是一个用于编程访问的 web api。

我从这条路开始:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/microsoft-logins?view=aspnetcore-2.2

并且已经走到了尽头。它可能工作正常,除了我得到这个:

InvalidOperationException: The default Identity UI layout requires a partial view '_LoginPartial' usually located at '/Pages/_LoginPartial' or at '/Views/Shared/_LoginPartial' to work.

但我不想要具有登录体验的 UI。我希望应用(以及来自浏览器等客户端的用户)通过 Microsoft 进行身份验证,然后访问我的 REST 资源。

我的配置服务如下所示:

        services.AddIdentity<IdentityUser, IdentityRole>()
                .AddDefaultTokenProviders()
                //.AddDefaultUI(UIFramework.Bootstrap4)
                .AddEntityFrameworkStores<IdentityDbContext>();
        services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
        {
            microsoftOptions.ClientId = _config["Authentication:Microsoft:ApplicationId"];
            microsoftOptions.ClientSecret = _config["Authentication:Microsoft:Password"];
        });

然后:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseStaticFiles();
        app.UseAuthentication();

程序只是做:

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseUrls("http://localhost:5000", "https://localhost:5001");

【问题讨论】:

  • 你需要一个用户界面;用户将如何被重定向到 Microsoft 身份验证提供程序并返回到您的应用程序以接收令牌?您可能正在寻找使用 JWT 令牌(因为调用 rest api 的其余客户端无法遵循重定向来触发交互式流程,用户在其中输入他的凭据),您可以将每个请求传递给您的 API。您需要使用 AAD(来自您的客户端、移动应用程序或 SPA)来获取访问令牌,您可以在每次请求时发送该令牌。
  • 以上教程适用于使用身份进行用户管理和使用 Microsoft 帐户进行身份/身份验证的 MVC 应用程序。它不适用于 WebAPI,因为它要求用户登录 Microsoft 帐户(或授予您的应用程序检索令牌的权限,如果已经登录并且是第一次登录)
  • 您只需要this.AddJwtBearer("AzureAD" 部分。其余的由客户端完成(将用户重定向到 AAD,取回令牌并在每次请求时发送)

标签: c# asp.net-core oauth-2.0


【解决方案1】:

您已经在同一个应用程序中实现了 Microsoft 身份验证AND 登录过程,这种解决方案为 ASP.NET 生成了一个 cookie

您可能希望客户端通过 OAuth 进行身份验证,并传递 Bearer Token
在这种情况下,您必须使用JwtBearer 令牌身份验证。

在这种情况下,您的应用程序提供身份验证 UI(如示例),而是仅验证/验证收到的令牌。

这里有一些参考

jwt auth in asp.net core
jwt validation
token authenticationin Asp.NET
Authentication in ASP.NET Core JWT

【讨论】:

  • 谢谢。有没有办法让实际的令牌检索过程“在后台”发生,或者客户端是否需要自己联系授权服务器并获取令牌?你知道从 Azure AD 获取令牌的任何好的 .NET 客户端库吗?我找到了一些关于使用 services.AddAuthentication(AzureADDefaults.BearerAuthenticationScheme) 的信息
  • 很遗憾,没有,客户端需要自己检索令牌,然后将其添加到标题或正文中。我建议您阅读 oAuth2 以更好地了解参与者和流程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-02
  • 2022-12-05
  • 1970-01-01
  • 2021-12-11
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多