Web Api项目

时间:2018-04-29 07:49:33

标签: c# .net asp.net-mvc oauth-2.0 jwt

我目前正在开展一个有2个客户的项目。 MVC客户端和Android客户端。

我已为ASP .Net Identityauthentication控制器MVC实施了MVCAPI项目还包括一些Web API控制器。在我的观点中,我调用了控制器,以及对我的网络cookie based authentication的一些ajax调用。

问题:当我从浏览器向Web API(或控制器)发出ajax调用时,是否有可能使用token authentication,但是当我从Android应用程序进行ajax调用时,请使用{{ 1}}?

我正在使用.Net Framework 4.6.1

1 个答案:

答案 0 :(得分:0)

定义两个策略:一个用于API( apipolicy ),另一个用于 ConfigureServices defaultpolicy ) > metod this:

services.AddAuthorization(options =>
{
    // define several authorization policies if needed
    options.AddPolicy("defaultpolicy", b =>
    {
        b.RequireAuthenticatedUser();
    });
    options.AddPolicy("apipolicy", b =>
    {
        b.RequireAuthenticatedUser();
        // define which authentication is used for this policy
        b.AuthenticationSchemes.Add(JwtBearerDefaults.AuthenticationScheme);
    });
});

应用您需要的每个策略来装饰具有所需[Authorize ("policy")]属性的控制器,如:

SampleDataApiController.cs - 已应用apipolicy

[Authorize ("apipolicy")]
[Route("api/[controller]")]
public class SampleDataApiController : Controller
{
}

AccountController.cs - 已应用defaultpolicy

[Authorize("defaultpolicy")]
[Route("[controller]/[action]")]
public class AccountController : Controller
{
}

这里的示例是我完整的 ConfigureServices 方法,可以为您提供一个想法:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    services.AddAuthorization(options =>
    {
        options.AddPolicy("defaultpolicy", b =>
        {
            b.RequireAuthenticatedUser();
        });
        options.AddPolicy("apipolicy", b =>
        {
            b.RequireAuthenticatedUser();
            b.AuthenticationSchemes.Add(JwtBearerDefaults.AuthenticationScheme);
        });
    });

    services.AddAuthentication(options =>
    {
        options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = "CustomScheme";
    })
    .AddCookie()
    .AddJwtBearer(options =>
    {
        // Bearer Logic
    })
    .AddOAuth("CustomScheme", options =>
    {
        // Oauth Logic
    });
}

为了简单起见,我刚刚添加了以下nuget。 Microsoft.AspNetCore.All

enter image description here