我正在尝试弄清楚如何在微服务环境中管理授权。
这是我的假设场景。
我有一项服务提供身份验证(使用devisegem)和通过 oauth2 授权(使用doorkeepergem)。登录后,服务会向用户返回JWT令牌。
现在假设我有两个 API 服务器。用户必须向这些 API 服务器提供 JWT 令牌才能访问私有资源。
是否可以与我的两个 API 服务器共享我用来签署 JWT 令牌的 JWT 密钥,以便它们可以解码令牌并验证其有效性?或者我的 API 服务器是否应该将 JWT 令牌转发到授权服务并要求其验证?
与 API 服务器共享 JWT 密钥的优点:
与 API 服务器共享 JWT 密钥的缺点:
我被困住了。我什至不知道是否有第三种解决方案我没有考虑:)
谢谢!
要将控制器标记为需要授权,通常可以像这样装饰它:
[Authorize]
public class MyController : Controller
Run Code Online (Sandbox Code Playgroud)
我们的身份验证是通过第三方提供商进行的,并且考虑到它的设置方式,我们只希望它在我们的生产环境中实际生效,我们不希望它在 QA 环境中处于活动状态。在 Startup.cs 文件中关闭环境很容易,但是有没有办法有条件地装饰控制器?我开始研究政策和角色,看起来可能会被黑客入侵,但有更好的方法吗?
我想在使用我的核心 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
目前,我们已经有了一个应用程序,它\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 授权和权限模块有什么区别?
\nauthentication permissions authorization oauth openid-connect
在我们的 MVC 解决方案中,我们有两个自定义实现AuthorizeAttribute- 一个已命名BasicHttpAuthorizeAttribute并已在生产中使用多年,另一个RoleAuthorizeAttribute是最近添加的。
创建时RoleAuthorizeAttribute我只是复制BasicHttpAuthorizeAttribute并修改了一些已经覆盖的方法。
这两个属性都用于验证用户身份并RoleAuthorizeAttribute验证用户是否具有所需的角色。
但是,RoleAuthorizeAttribute永远不会对用户进行身份验证。它只是没有被调用,而是当非登录用户到达控制器操作并且代码请求上下文用户时,我们的 MVC 控制器会抛出异常。
下面是这个习俗的概要AuthorizeAttribute。如果我在所有这些方法上放置断点,我发现在发出请求时它们都不会被命中。
谁能解释为什么这个类不用于验证用户身份?为什么未经身份验证的用户不会被重定向到登录页面,但如果我交换RoleAuthorize或BasicHttpAuthorize简单地替换基本用户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
我使用 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
我尝试从 Visual Studio 2019 登录我的 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 时,首先让我困惑的是有各种身份验证服务:
在 Azure 门户中,在我的应用程序服务下的“身份验证/授权”下,有一个标记为“应用程序服务身份验证”的切换开关。如果我打开此功能,我可以设置身份验证提供程序。
在Azure门户中,有Azure Active Directory,我猜它与上面的内容有关?
还有 Azure B2C。
Azure 应用服务身份验证和 Azure B2C 之间有什么区别?我应该使用哪一个?上述第 1 点和第 2 点有什么区别?我见过的一些例子使用了第 1 点,还有一些使用了第 2 点。
抱歉,如果这是一个非常模糊的问题。我只是在努力弄清楚该朝哪个方向前进。我发现 Auth0 非常简单,但不幸的是我不能对 Azure 身份验证说同样的话。我基本上只是想弄清楚哪个 Azure 选项最适合替换我现在正在使用的 Auth0。谢谢
authentication authorization azure auth0 azure-authentication
我正在使用 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) 我正在尝试为从 API 端生成的授权持有者令牌创建标头。我正在使用 CORS-anywhere 来调用 API 并通过 JSON 获取数据。我想知道,授权承载令牌标头的正确格式是什么?
authorization ×10
azure ×3
c# ×2
.net-core ×1
api ×1
asp.net ×1
asp.net-core ×1
auth0 ×1
bearer-token ×1
cloud ×1
controller ×1
core-api ×1
django ×1
google-api ×1
heroku ×1
javascript ×1
jwt ×1
oauth ×1
permissions ×1
proxy ×1
python ×1
token ×1