默认情况下,我使用ASP .NET MVC和授权系统编写了一个Web应用程序。我配置了IdentityRole并通过外部提供者进行输入。使用当前数据库,我创建了我的数据上下文。现在我想写一个Xamarin.Android应用程序并连接到我的数据库,我想要一个简单的API。但是,您想要访问此API的功能仅适用于具有特定角色的用户。该API非常简单,因此不希望添加到WCF或WebAPI项目草案中。如何做到最好?使用角色的简单ASP .NET MVC API控制器
回答
我想完成并完全回答此问题并关闭此主题。我一直在寻找如何为移动客户端添加连接到ASP.NET MVC上现有站点的能力。在我的搜索中,我遇到了一篇很棒的文章Justin Hyland on March 2, 2014 原则上,这篇文章中的所有内容都写得很清楚,但我想为清晰起见做一个小小的贡献。 在安装WebAPIConfig指出,需要
添加以下代码到WebApiConfig注册方法
但是,如果我们考虑的情况下ASP.NET MVC我们没有这样的文件。这一切都非常简单,你只需要这样一个文件来创建文件夹App_Start。该文件的内容可以完全保留在文章中。
为了摆脱将不可避免地出现的错误,我们需要安装两个nuget软件包:Microsoft.AspNet.WebApi和Microsoft.AspNet.WebApi.Owin。
非常好!现在我们可以转向获取该标记的方法,然后将该标记添加到查询中,我们可以通过属性[Authorize]获得所需的数据关闭。
一句小话。如果您需要访问针对特定角色关闭的方法,那么从文章的Authenticate方法应该添加几行代码。
identity.AddClaim(new Claim(ClaimTypes.Name, user));
添加一行::
identity.AddClaim(new Claim(ClaimTypes.Role, role));
哪里角色,你可以得到以下,例如:行后立即
var userIdentity = UserManager.FindAsync(user, password).Result;
var role = RoleManager.FindById(userIdentity.Roles.First().RoleId).Name;
用户名和密码,你必须发送一个请求。
我也想举一个代码来发送请求和接收响应的例子。无需查找并立即开始编码。
async Task<string> GetToken(string userName, string password)
{
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("user", userName),
new KeyValuePair<string, string> ("password", password)
}
);
using (var client = new HttpClient())
{
HttpResponseMessage response = await client.PostAsync(APP_PATH + "/Authenticate", content);
var result = await response.Content.ReadAsStringAsync();
return result;
}
}
async Task<string> GetUserInfo(string token)
{
using (var client = CreateClient(token))
{
var response = await client.GetAsync(APP_PATH + "/ValidateToken");
return await response.Content.ReadAsStringAsync();
}
}
HttpClient CreateClient(string accessToken = "")
{
var client = new HttpClient();
if (!string.IsNullOrWhiteSpace(accessToken))
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
}
return client;
}
所有只需要以正确的顺序调用适当的方法。我希望对某人有用。 P.S. 如果您在Visual Studio中创建一个新项目以获得此功能,您只需要打勾:
首先,您不需要单独的项目来使用Web Api;您可以在同一个项目中同时使用MVC和Web Api。对于像现场AJAX请求这样的一个端点,只需创建返回JSON或XML的MVC操作就可以了,但如果你正在谈论一个真正的API,即使它非常简单,我也会说Web Api 。
使用[Authorize]
属性,您可以保护您的Web Api操作与您的MVC操作非常相似。如果您需要按角色进行限制,则只需将角色传递给该角色即可。但是,这里的巨大差异,特别是如果您正在提供移动应用程序,则需要将授权与请求一起传递。这通常通过使用Authorization
标头和不记名令牌来完成。基本上,您需要设置一个端点来签署用户并返回令牌。然后,每个需要授权的后续请求都会在标头中包含该令牌。
这就是WebAPI立即提供的“开箱即用”不记名令牌解决方案。但是,正如我所指出的,我不想仅仅为此添加整个项目。我怎样才能使这个功能不会膨胀我的决定? – starmucks
- 1. 简单的asp控制器
- 2. ASP .NET MVC保护控制器/动作
- 3. 通FORMDATA从角到.NET MVC控制器
- 4. ASP .Net MVC 3:单元测试控制器动作
- 5. .ASP MVC中,控制器
- 6. AJAX + ASP MVC Ambigous控制器
- 7. 使用ASP .Net核心(非mvc)的角度2路由
- 8. ASP .net单元测试控制器使用MOLES
- 9. ASP MVC http.post调用行动控制器角度不工作
- 10. Spring MVC简单控制器示例
- 11. 确定用户登录后有多少个ASP .NET MVC角色?
- 12. 不调用ASP MVC控制器
- 13. ASP .net MVC创建控制器之前的预处理请求
- 14. 无法使用Asp .Net中的ajax调用Web API控制器方法
- 15. SSL和ASP .NET MVC
- 16. ASP .NET MVC 5根据角色和/或状态编辑表格
- 17. 何时使用API控制器与MVC控制器
- 18. .NET MVC控制器异常
- 19. Web API控制器和MVC控制器 - 身份验证
- 20. ASP MVC使用超链接控制
- 21. 基于角色的控制器访问
- 22. 在asp-net MVC控制器上接收JSON对象
- 23. ASP/NET MVC:测试控制器与会话?惩戒?
- 24. ASP .NET MVC - 如何从控制器发送html来查看
- 25. ASP .NET MVC 3 - 将参数从视图传递到控制器
- 26. 创建注册表单和角色asp mvc身份证
- 27. 使用ASP NET Core MVC 6锚标签助手到区域控制器
- 28. 单点登录ASP NET MVC
- 29. 使用stripe的表单来处理ASP .NET中的付款MVC
- 30. MVC成员(OpenID)控制器的ASP MVC空引用异常
您的问题太广泛了,而且有点混乱。角色提供者是ASP.NET成员资格的概念,但你的问题被标记为asp.net-identity,这是一个完全不同的认证系统。这是什么? –
我的意思是asp.net的身份。我对错误的措辞表示歉意。 – starmucks