【发布时间】:2019-05-30 22:45:51
【问题描述】:
我的基本要求是公开一些 REST 资源的 Web Api。访问任何资源都需要身份验证,我希望通过 Microsoft 帐户来实现。这是一个用于编程访问的 web api。
并且已经走到了尽头。它可能工作正常,除了我得到这个:
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