首页 文章

授权由oidc保护的点网核心控制器中的属性

提问于
浏览
1

我有MVC dot Net Core app 2.0 . 该应用程序使用混合授权对IdentityServer4进行身份验证,因此我有:

services.AddAuthentication(o =>
{
o.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
o.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
o.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{......

这很好用 .

我还有一个JavaScript客户端,使用隐式授权对相同的IDP进行身份验证,并且也可以正常工作 . 我想允许javascript客户端调用API(MVC应用程序内的控制器)传递持票令牌 . 如果该API具有我正在获取的Authorize属性:无法加载http://localhost:4444/testidentity:请求的资源上没有'Access-Control-Allow-Origin'标头 . Origin'http://localhost:5003如果我不需要在API控制器级别进行授权,我有CORS关注并且调用有效 .

我可以轻松地将API移动到一个单独的项目中,并在API中具有以下内容:

services.AddAuthentication("Bearer")
.AddIdentityServerAuthentication(options =>
{.......

这可以工作,但我想让它在MVC应用程序中工作,显然缺少一些中间件配置 .

2 回答

  • 0

    听起来你正在创建一个与你的页面不同的域名HttpRequest . 因此浏览器会阻止它,因为出于安全原因,它通常允许同一来源的请求 . 当您想要执行跨域请求时,您需要做一些不同的事情 . 关于如何实现这一目标的教程是Using CORS .

    引自Cross-Origin XMLHttpRequest

    常规网页可以使用XMLHttpRequest对象从远程服务器发送和接收数据,但它们受到相同原始策略的限制 . 扩展不是那么有限 . 扩展可以与其来源之外的远程服务器通信,只要它首先请求跨源权限即可 .

    需要为CORS配置Identityserver 4 . 我怀疑你需要添加这样的东西Allowing Ajax calls to the Web API with CORS

  • 0

    我猜你的MVC应用程序使用openid bearer和cookies身份验证,确保将API(MVC app中的控制器)身份验证模式称为“bearer”,然后它将在请求中查找承载令牌(无论谁调用API传递您的CORS为您的应用定义的策略)并根据您的中间件配置验证持有者令牌验证 .

    还要确保,访问令牌具有MVC app所需的范围来调用控制器 .

    我猜你需要下面的东西

    [Authorize(AuthenticationSchemes = 
        JwtBearerDefaults.AuthenticationScheme)]
    

    有关更多信息,请参阅this

相关问题