因此,我在ASP.NET核心中构建了一个自定义Web,它是由角色授权的。在其他核心网络应用中使用这个API的正确方法是什么?我应该如何授权应用程序使用API?
编辑:关于我试图做的事情的更多细节:
假设我有授权政策。在我单独的Web应用程序中,我在Startup中声明了这个策略,并授权了一些API方法。它工作,现在托管在"webapi.foo.com",太棒了。现在假设我创建了一个新的、独立的web应用程序,我想使用API中的一些方法。因此,我想我的问题是双重的:如何在"webapi.foo.com“中称呼这些方法?如何确保我的应用程序拥有调用这些授权方法的权限?
发布于 2016-04-25 17:56:06
授权I通过让前端系统(webapp.foo.com)调用后端API (api.foo.com)上的登录方法,使用Json令牌(JWT)和Bearer实现了这一点。api.foo.com的登录方法对用户进行身份验证,并在其响应中发出一个JWT。然后,webapp.foo.com使用这个JWT来验证它的控制器中的操作(通过定义一个使用令牌声明的授权策略),并且每当它在那里进行调用时,也将令牌传递给foo.api.com。webapp.foo.com和api.foo.com只需要基于JWT的声明集构建它们的授权策略,然后它们就可以共享令牌的使用。
调用api.foo.com
string jwt = xxx.yyy.zzz; //use the actual JWT returned from your login call
var client = new HttpClient("http://api.foo.com");
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", jwt); //add the JWT to the authorization header
var requestStr = JsonConvert.SerializeObject(new { myParam = viewModel.myParam }); //serialize the object you are passing as a parameter to api.foo.com as Json
HttpContent requestBody = new StringContent(requestStr, Encoding.UTF8, "application/json");
var response = await client.PostAsync("myController\\myAction", requestBody); //POST to api.foo.com (or whatever action you want to take)
response.EnsureSuccessStatusCode();
var resultstr = response.Content.ReadAsStringAsync().Result; //read the result as a string
dynamic resultObj = JsonConvert.DeserializeObject<dynamic>(resultstr); //if desired, deserialize it to an object (I just used dynamic as an example)
发布于 2016-04-22 14:31:45
不能百分之百确定我是否正确地理解了你的问题。
如果使用使用命名策略的AuthorizeAttribute装饰控制器/操作,则使用控制器库的web应用程序可以在启动时定义命名策略,并配置允许访问的角色或声明或其他要求。
[Authorize(Policy = "SystemLogPolicy")]
启动示例:
services.AddAuthorization(options =>
{
options.AddPolicy(
"SystemLogPolicy",
authBuilder =>
{
authBuilder.RequireRole("ServerAdmins");
});
}
也请参阅经授权的文件
https://stackoverflow.com/questions/36796379
复制相似问题