标签: authorization

在微服务环境中,任何生产者都应该能够验证 JWT 令牌吗?

我正在尝试弄清楚如何在微服务环境中管理授权。

这是我的假设场景。

我有一项服务提供身份验证(使用devisegem)和通过 oauth2 授权(使用doorkeepergem)。登录后,服务会向用户返回JWT令牌。

现在假设我有两个 API 服务器。用户必须向这些 API 服务器提供 JWT 令牌才能访问私有资源。

是否可以与我的两个 API 服务器共享我用来签署 JWT 令牌的 JWT 密钥,以便它们可以解码令牌并验证其有效性?或者我的 API 服务器是否应该将 JWT 令牌转发到授权服务并要求其验证?

与 API 服务器共享 JWT 密钥的优点:

  • 无需往返授权服务

与 API 服务器共享 JWT 密钥的缺点:

  • 如果有人闯入我的任何 API 服务器,他/她就可以访问我的 JWT 密钥

我被困住了。我什至不知道是否有第三种解决方案我没有考虑:)

谢谢!

authentication authorization token jwt microservices

3
推荐指数
1
解决办法
740
查看次数

具有[授权]的环境相关控制器

要将控制器标记为需要授权,通常可以像这样装饰它:

[Authorize]
public class MyController : Controller
Run Code Online (Sandbox Code Playgroud)

我们的身份验证是通过第三方提供商进行的,并且考虑到它的设置方式,我们只希望它在我们的生产环境中实际生效,我们不希望它在 QA 环境中处于活动状态。在 Startup.cs 文件中关闭环境很容易,但是有没有办法有条件地装饰控制器?我开始研究政策和角色,看起来可能会被黑客入侵,但有更好的方法吗?

c# asp.net authorization controller

3
推荐指数
1
解决办法
806
查看次数

.NET Core API 中的自定义授权过滤器

我想在使用我的核心 api 访问任何数据之前对用户进行授权,所以我尝试使用 JWT 身份验证。我在使用 api 登录用户时成功生成了令牌,并将该令牌保存在会话中的客户端,现在每当用户想要使用 api 访问任何数据时,我都会将该令牌在标头中发送到 api,并且我想验证该 JWT 令牌使用自定义授权过滤器。我已经创建了自定义授权过滤器并将其应用到我的 GetMenu api 上,并且我能够成功验证该令牌,但在授权过滤器中进行令牌验证后,它不会在我的 GetMenu api 上命中它。

这是我的 AccountController 代码:

[Filters.Authorization]
[AllowAnonymous]
[HttpPost]
[Route("GetMenu")]
public IActionResult GetMenu(string clientid, int rolecode, string repcode)
{
    //further process
}
Run Code Online (Sandbox Code Playgroud)

这是我的 Filters.Authorization 代码:

public class Authorization: AuthorizeAttribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationFilterContext filterContext)
    {
        if (!ValidateToken(filterContext.HttpContext.Request.Headers["token"]))
        {
            filterContext.Result = new UnauthorizedResult();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我在 OnAuthorization 方法和 GetMenu api 上有断点。我通过邮递员调用我的 GetMenu api 进行测试,它成功地在 Filters.Authorization 中的 OnAuthorization 方法上命中它并验证我的 JWT 令牌并在邮递员中显示状态代码:200,但在成功令牌验证后,它应该在 GetMenu api 上命中以进行进一步的操作正在处理数据,但没有命中。可能是什么问题?我缺少什么?请帮忙。

authorization core-api asp.net-authorization .net-core asp.net-core

3
推荐指数
1
解决办法
2万
查看次数

应用程序权限和oauth2授权有什么区别?

目前,我们已经有了一个应用程序,它\xe2\x80\x99是一个前后端分离的应用程序,前端是一个Web应用程序(SPA),后端是一个Web API。

\n\n

对于应用程序来说,我们已经有了使用注册、用户登录、用户角色、角色权限、用户检查和权限检查。

\n\n

现在,我们正在集成外部身份服务(open id和Oatuh2),但我误解了外部身份服务的身份验证和授权

\n\n

问题1:是的,我可以使用外部身份服务登录并获取访问令牌,但之后,我仍然需要在我的应用程序中维护用户,因为对于业务来说,我需要知道谁创建了订单,谁操作了它etc\xe2\x80\xa6 那么,用户系统我在应用程序中所做的事情,我仍然需要做,它是否正确我所做的事情?

\n\n

问题2:对于授权,我仍然需要在应用程序中为自己维护用户角色、角色权限和权限检查,如果是这样,身份服务(OAuth2)的授权有什么用?我的应用程序中的 OAuth2 授权和权限模块有什么区别?

\n

authentication permissions authorization oauth openid-connect

3
推荐指数
1
解决办法
1476
查看次数

自定义 AuthorizeAttribute 未实现

在我们的 MVC 解决方案中,我们有两个自定义实现AuthorizeAttribute- 一个已命名BasicHttpAuthorizeAttribute并已在生产中使用多年,另一个RoleAuthorizeAttribute是最近添加的。

创建时RoleAuthorizeAttribute我只是复制BasicHttpAuthorizeAttribute并修改了一些已经覆盖的方法。

这两个属性都用于验证用户身份并RoleAuthorizeAttribute验证用户是否具有所需的角色。

但是,RoleAuthorizeAttribute永远不会对用户进行身份验证。它只是没有被调用,而是当非登录用户到达控制器操作并且代码请求上下文用户时,我们的 MVC 控制器会抛出异常。

下面是这个习俗的概要AuthorizeAttribute。如果我在所有这些方法上放置断点,我发现在发出请求时它们都不会被命中。

谁能解释为什么这个类不用于验证用户身份?为什么未经身份验证的用户不会被重定向到登录页面,但如果我交换RoleAuthorizeBasicHttpAuthorize简单地替换基本用户Authorize,那么它们就会被重定向?

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]    
public class RoleAuthorizeAttribute : System.Web.Http.AuthorizeAttribute
{
    /// <summary>
    /// Gets or sets the <see cref="Role"/> enumerations required for authorization.
    /// </summary>
    public Role[] RequiredRoles
    {
        get {...}
        set {...}
    }

    public bool RequireSsl { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# authentication authorization authorize-attribute asp.net-authorization

3
推荐指数
1
解决办法
618
查看次数

使用 Azure Active Directory 身份验证在 Linux 上重新启动 Azure 应用服务会重置 /.auth/me/

我使用 Azure 应用服务身份验证/授权来限制对我的 Web 应用程序的访问,并使用 Azure Active Directory 作为登录方法。

我已将“请求未经身份验证时采取的操作”设置为“使用 Azure Active Directory 登录”。

为了查找有关登录用户的详细信息,我向 /.auth/me 端点发出请求(如 Microsoft 文档所述)。这工作正常,直到应用程序在 Azure 中重新启动。重启后,/.auth/me/端点返回一个空数组,而不是用户信息。

仅当应用程序服务计划运行 Linux 时,我才能重现该问题。如果我创建 Windows 应用服务计划,即使重新启动后也会填充 /.auth/me 端点。

我尝试在 Azure 上创建一个新应用程序,而不上传任何代码,但问题仍然存在。

我是否需要设置一些额外的设置才能使其在基于 Linux 的 ASP 上运行?我已经使用基于 docker 的 ASP 和基于代码的(在 dotnet core 2.2 上)进行了测试。

authorization azure azure-active-directory azure-web-app-service

3
推荐指数
1
解决办法
1252
查看次数

无法从 Visual Studio 2019 登录 Azure 帐户

我尝试从 Visual Studio 2019 登录我的 Azure 订阅,但收到以下消息:

我们无法刷新该帐户的凭据。授权服务器返回无效响应。

错误 Visual Studio 2019

cloud authentication authorization azure visual-studio-2019

3
推荐指数
1
解决办法
2279
查看次数

Auth0 的合适 Azure 替代品

我有一个作为 Azure 应用服务托管的 ASP .Net Core 2.2 Web API。然后是一个 Angular SPA,它使用此 API,作为静态网站托管在 Azure 存储上。

我目前使用 Auth0 作为我们的身份验证和身份服务器。我正在考虑用 Azure 替换 Auth0,但我花了几天时间试图弄清楚我应该做什么,但我完全迷失了。

因此,Auth0 当前服务的目的(我希望 Azure 也能提供服务)是保护我的 Web API,并为其提供身份服务,以便 API 知道哪个用户登录了。因此,当前端调用 API,Auth0 自动将其重定向到登录页面。在这里,用户可以使用现有帐户(包括社交帐户)登录,也可以创建新帐户。登录后,Auth0 向前端提供访问令牌。然后,前端将此访问令牌包含在每个 API 调用的标头中。访问令牌包含 API 用来了解哪个用户正在进行调用的身份信息。所有用户都存储在 Auth0 中。因此,当新用户使用前端 Web 应用程序时,Auth0 会将他们重定向到登录屏幕,他们在其中选择“注册”,并在 Auth0 中创建一个帐户。顺便说一句,任何用户都可以执行此操作 - 这是一个任何人都可以注册和使用的公共网络应用程序。

因此,当考虑使用 Azure 而不是 Auth0 时,首先让我困惑的是有各种身份验证服务:

  1. 在 Azure 门户中,在我的应用程序服务下的“身份验证/授权”下,有一个标记为“应用程序服务身份验证”的切换开关。如果我打开此功能,我可以设置身份验证提供程序。

  2. 在Azure门户中,有Azure Active Directory,我猜它与上面的内容有关?

  3. 还有 Azure B2C。

Azure 应用服务身份验证和 Azure B2C 之间有什么区别?我应该使用哪一个?上述第 1 点和第 2 点有什么区别?我见过的一些例子使用了第 1 点,还有一些使用了第 2 点。

抱歉,如果这是一个非常模糊的问题。我只是在努力弄清楚该朝哪个方向前进。我发现 Auth0 非常简单,但不幸的是我不能对 Azure 身份验证说同样的话。我基本上只是想弄清楚哪个 Azure 选项最适合替换我现在正在使用的 Auth0。谢谢

authentication authorization azure auth0 azure-authentication

3
推荐指数
1
解决办法
1844
查看次数

如何在实时网站上的 Django 中向 Google 授权应用程序

我正在使用 Google Calendar API,但这适用于他们的任何 API。

我按照他们提供的快速入门示例进行操作,在本地环境中,这效果很好。我面临的主要问题是,在本地环境中,他们提供的代码设置为在需要授权时自动打开 URL 来授权应用程序。在实际环境中情况并非如此,它与这部分代码有关:

flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
Run Code Online (Sandbox Code Playgroud)

但是,我不太明白我应该调用什么。


这是他们提供的完整代码:

from __future__ import print_function
import datetime
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

# If modifying these scopes, delete the file token.pickle.
SCOPES = ['https://www.googleapis.com/auth/calendar.readonly']

def main():
    """Shows basic usage of the Google Calendar API.
    Prints the start and name of the next 10 events on the user's calendar.
    """
    creds = …
Run Code Online (Sandbox Code Playgroud)

python django authorization google-api heroku

3
推荐指数
1
解决办法
2580
查看次数

Javascript 中的授权承载令牌标头

我正在尝试为从 API 端生成的授权持有者令牌创建标头。我正在使用 CORS-anywhere 来调用 API 并通过 JSON 获取数据。我想知道,授权承载令牌标头的正确格式是什么?

javascript api proxy authorization bearer-token

3
推荐指数
1
解决办法
2万
查看次数