Проверка подлинности Cookie AND Token в приложении MVC в проекте Web Api - PullRequest
0 голосов
/ 29 апреля 2018

В настоящее время я работаю над проектом, в котором есть 2 клиента. MVC клиент и Android клиент.

Я реализовал ASP .Net Identity для authentication моих MVC контроллеров. Проект MVC также включает некоторые веб-контроллеры API. На мой взгляд, я вызываю оба контроллера, а также некоторые вызовы ajax на мой веб API.

Вопрос: Можно ли, когда я выполняю ajax-вызов из браузера в веб-API (или контроллеры), использовать cookie based authentication, но когда я выполняю ajax-вызов из приложения Android, используйте token authentication?

Я использую .Net Framework 4.6.1

1 Ответ

0 голосов
/ 29 апреля 2018

определяют две политики: одну для API ( apipolicy ) и другую для обычных вызовов MVC ( defaultpolicy ) в Startup.cs в ConfigureServices метод 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 - с применением политики по умолчанию

[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
    });
}

Я просто добавил следующий нюгет для простоты. Microsoft.AspNetCore.All

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...