gpt4 book ai didi

c# - 在 ASP.NET Core 2.0 中从另一个应用程序服务授权(无用户交互)

转载 作者:行者123 更新时间:2023-12-04 02:27:37 24 4
gpt4 key购买 nike

我在 Azure 中有一个面向互联网 (PubWeb) 的 Web API 应用程序,因此可以从任何地方使用它。我创建了一个 Web API(同样,在 Azure 中,我们将其称为 InWeb)。我想要强大的安全规则:

  1. InWeb 只能由 PubWeb 使用。这可能涉及一些网络安全 - 这是一个简单的部分(在 Azure 中)。
  2. PubWeb 必须以某种方式获得 Azure AD 授权才能使用 InWeb 服务。我想到了服务主体、证书等。但我不确定。

那么 2 的最佳解决方案是什么?

更新 - 这是 InWeb Core 2.0 身份验证设置:

public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddAzureAdBearer(options => Configuration.Bind("AzureAd", options));

services.AddMvc(options => { options.InputFormatters.Add(new TextPlainInputFormatter()); });
}

最佳答案

您必须在 Azure AD 中将这两个 API 注册为应用程序。这可以通过 Azure Active Directory Blade 的应用程序注册来完成。

现在我假设对 PubWeb 的调用未使用 Azure AD 不记名 token 进行身份验证。这意味着您唯一的选择是在调用 InWeb 时使用应用程序权限和客户端凭据授予。

要定义应用程序权限,您必须将“应用程序角色”添加到 InWeb 的 list 中。您可以通过单击 Azure AD 中 InWeb 应用程序边栏选项卡中的“ list ”按钮来打开 list 。

以下是应用角色示例:

"appRoles": [
{
"allowedMemberTypes": [
"Application"
],
"displayName": "Read all things",
"id": "32028ccd-3212-4f39-3212-beabd6787d81",
"isEnabled": true,
"description": "Allow the application to read all things as itself.",
"value": "Things.Read.All"
}
],

您应该为其生成一个新的 ID,并将显示名称和描述设置为您想要的任何内容。 是当 PubWeb 调用 InWeb 时 token 中将出现的内容。

现在您必须转到 PubWeb 的边栏选项卡,然后转到所需的权限。

您必须转到“添加”-> 选择“InWeb”-> 勾选您刚刚定义的应用程序权限。

然后点击授予权限。现在PubWeb有权调用InWeb。

您还需要为 PubWeb 生成 key /客户端 key 。这本质上就是它的密码。您还需要 PubWeb 的客户端 ID/应用程序 ID。

您还需要 InWeb 的应用程序 ID URI。您可以从 Azure AD 的边栏选项卡中的“属性”中找到它。这将是我们将从 PubWeb 获取 token 的资源

您还需要 Azure AD 的 ID。您可以从主 Azure AD 边栏选项卡中的“属性”中找到它。

现在要获取 token ,您需要使用 OAuth2 客户端凭据授予流程。最简单的方法是使用像 ADAL 这样的库:https://learn.microsoft.com/en-us/azure/active-directory/develop/active-directory-authentication-libraries .

如果您想手动执行此操作,可以在此处找到有关 HTTP 调用的详细信息:https://learn.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-oauth-service-to-service#service-to-service-access-token-request

它看起来像这样:

POST /contoso.com/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_id=625bc9f6-3bf6-4b6d-94ba-e97cf07a22de&client_secret=qkDwDJlDfig2IpeuUZYKH1Wb8q1V0ju6sILxQQqhJ+s=&resource=https%3A%2F%2Fservice.contoso.com%2F

将客户端 ID 设置为 PubWeb 的客户端 ID,并将客户端 key 设置为 PubWeb 的客户端 key 。资源应为 InWeb 的 App ID URI。

您应该收到一个访问 token 作为响应,您需要将其作为 header 附加到您向 InWeb 发出的请求中:

Authorization: Bearer access-token-here

现在,InWeb 当然还必须验证 token 。这是一个 .NET 示例应用程序(也有其他示例):https://github.com/Azure-Samples/active-directory-dotnet-webapp-webapi-oauth2-appidentity/blob/master/TodoListService/App_Start/Startup.Auth.cs

该项目实际上还有一个客户端使用客户端凭据流调用 API:https://github.com/Azure-Samples/active-directory-dotnet-webapp-webapi-oauth2-appidentity/blob/master/TodoListWebApp/Controllers/TodoListController.cs#L95 .

抱歉回答太长了,我想补充一些细节:)

但如果您对某些特定部分有疑问,请随时询问。

关于c# - 在 ASP.NET Core 2.0 中从另一个应用程序服务授权(无用户交互),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47207911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com