首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在其他核心网络应用程序中使用自定义的、经过授权的ASP.NET核心Web?

如何在其他核心网络应用程序中使用自定义的、经过授权的ASP.NET核心Web?
EN

Stack Overflow用户
提问于 2016-04-22 14:23:44
回答 2查看 683关注 0票数 1

因此,我在ASP.NET核心中构建了一个自定义Web,它是由角色授权的。在其他核心网络应用中使用这个API的正确方法是什么?我应该如何授权应用程序使用API?

编辑:关于我试图做的事情的更多细节:

假设我有授权政策。在我单独的Web应用程序中,我在Startup中声明了这个策略,并授权了一些API方法。它工作,现在托管在"webapi.foo.com",太棒了。现在假设我创建了一个新的、独立的web应用程序,我想使用API中的一些方法。因此,我想我的问题是双重的:如何在"webapi.foo.com“中称呼这些方法?如何确保我的应用程序拥有调用这些授权方法的权限?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

代码语言:javascript
运行
复制
            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)
票数 2
EN

Stack Overflow用户

发布于 2016-04-22 14:31:45

不能百分之百确定我是否正确地理解了你的问题。

如果使用使用命名策略的AuthorizeAttribute装饰控制器/操作,则使用控制器库的web应用程序可以在启动时定义命名策略,并配置允许访问的角色或声明或其他要求。

代码语言:javascript
运行
复制
[Authorize(Policy = "SystemLogPolicy")]

启动示例:

代码语言:javascript
运行
复制
services.AddAuthorization(options =>
{
    options.AddPolicy(
        "SystemLogPolicy",
        authBuilder =>
        {
            authBuilder.RequireRole("ServerAdmins");
        });
}

也请参阅经授权的文件

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36796379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档