5

我知道这个问题可能会收到一些降价,但我在Google上搜索了三天,结果没有真正可用。如何在Asp Net Core RC1 MVC中添加带有令牌认证的“ApiController”MVC

我在Visual Studio中创建了一个默认的ASP.NET Core 1.0 RC1项目,使用个人用户帐户认证/授权。一切都很简单和简单,因为这个项目使用Microsoft.AspNet.Authentication.Cookies脚手架,而VS 2015完成所有繁重工作。但是,我们希望从同一个项目(使用相同的数据库,用户,声明等)中公开一个API,这些API将从移动设备甚至一些简单的SPA中使用。这样,我们需要为API使用诸如JWT之类的东西(关于如何仅使用WebAPI来完成此操作,有很多教程)。

我们希望使用MVC(非SPA)方式来执行主项目,以利用视图/控制器脚手架以及Visual Studio可以提供的所有功能。

有很多MVC-only或WebAPI-only方法的教程,但是你能指点我怎么把它们混合在一起?

是否有一种方法仅在系统范围内使用JWT和MVC和WebAPI?

预先感谢您。

+0

仅供参考:MVC和的WebAPI已经在MVC 6被合并。'Controller'作为'MVC'和'API'控制器的基类,例如没有'ApiController'了。 –

+0

嗨@HenkMollema我知道...因为这个原因,我把“ApiController”放在引号之间。我知道控制器是一样的。无论如何,感谢您的评论。 –

+0

Hi @Cezar。你有没有想过这个?我有完全相同的场景和问题。谢谢 –

回答

1

Limiting identity by scheme此链接可能是你的问题的答案。

在某些情况下,如单页的应用程序有可能 结束了多种认证方式,cookie认证到 日志和JavaScript的请求承载认证。

我认为,你可以使用下面的代码为MVC和JavaScript调用(当然,您必须启用Cookie,并承载中间件):

[Authorize(AuthenticationSchemes = "Cookie,Bearer")] 
public class YourController : Controller 
+0

谢谢你的回答!我担心这在ASP.NET Core 1中不起作用,因为只有一个'ActiveAuthenticationSchemes'属性,并且它不在构造函数中。现在,它接受的唯一一个参数是一个包含策略名称的字符串:'public AuthorizeAttribute(string policy);'。你能指出我应该如何创建一个“仅限WebAPI”策略? –

+0

我无法测试代码,但可能是一个解决方案:'options.AddPolicy(“PolicyName”,policy => {policy.Requirements.Add(new Infrastructure.MinimumAgeRequirement(21)); policy.AddAuthenticationSchemes(“持票人“); });' –