我目前正在开展一个有2个客户的项目。 MVC
客户端和Android
客户端。
我已为ASP .Net Identity
个authentication
控制器MVC
实施了MVC
。 API
项目还包括一些Web API
控制器。在我的观点中,我调用了控制器,以及对我的网络cookie based authentication
的一些ajax调用。
问题:当我从浏览器向Web API(或控制器)发出ajax调用时,是否有可能使用token authentication
,但是当我从Android应用程序进行ajax调用时,请使用{{ 1}}?
我正在使用.Net Framework 4.6.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