Azure API管理中高效的OAuth授权管理

在开发一个运用程序时,大多数时分,你运用API调用来发送和接纳信息。因而,你应该遵循一个认证和授权进程来运用API,除非它是公共API。这https域名些认证/授权进程运用1)一个认证密钥或2)一个经过安全教育日OAuth进程的拜访令牌。

运用auth密钥的办法,你能github开放私库够把它存储在一个安全的地https域名方,比方通信达Azure密钥库github官网服务,然后获取通信达安全教育平台登录入口钥。这是一个相对github直播平台永久回家简略的进程。可是,假如你需APP要运用OAuth流程通信大数据行程卡通信地址就会因为下appetite面的授权流程而变得复approve杂。下面github汤姆是概念性的OAuth流程。

  1. 恳求一个approve授权码
  2. 收到授权码
  3. 经过供给GitHub授权码来恳求一个拜访令牌
  4. 收到拜访令牌和改写令牌
  5. 经过供给拜访令牌来调用APIAPP恳求
  6. 接纳API响应
  7. 一旦现有的拜访令牌过期apple,经过供给改GitHub写令牌恳求新的拜访令牌
  8. 收到新的拜访令牌和新的改appreciate写令牌
  9. 经过供给新的拜访令牌来调用API恳求安全教育手抄报
  10. 接纳API响应

Azure API办理中高效的OAuth授权办理

假如你想了解更多关于OAuth ahttps协议uth的流程,请参阅本文https和http的区别档。

因而,开发人员应该将这些流程appstore作为运用开发的一部分来完成。appreciate假如你想运用的服务供给安全教育渠道登录进口一个SDK通信工程专业,你可能会很走运。假如没有,你应该自己做,这十分麻烦。假如有人为你做github开放私库一切繁琐的步骤呢?比方说,在安全的地github中文官网网页方,有安全教育手抄报人代表github永久回家地址全期github是什么计算器你做一切HTTPS的认证进程,并简略地回来拜访令牌。假如这种情况产生,你的运用开发速度将大大增加。Azure APIgithub永久回家地址办理(APIM)最近发布了一个名为 “Authorisations “的预览功用,能够代表你完结OAuth流程。在这篇文章中,我将运用一个保管在Azur通讯工程e静态WeAPPb运用(SWA安全)上的Blazor We安全工程师b Assembly(WASM)github开放私库运用来评论这个功安全教育渠道登录进口能。

你能够从这个GitHub资源库中下载示例运用代码。

库房HTTPS中有两https域名个运用,一个是基于githubappetite中文官github中文社区网网页Blazor WASM的,另一个是基于React的。我将在这里运用Blazor WASM的样本。假如你对React运用的通讯行程卡下载app样本https和http的区别感兴趣,请拜访我的同事Aaron Powell的博文。

Blazor网络装配运用https和http的区别

关于Bgithub敞开私库lazor WASM的总体情况,请参阅Blazor教程文件。相反,我安全教育平台登录计划看一下担任OAuth授权和拜访令牌的组件appreciate。这个组件接纳用户的输入,并将其存储通讯地址为.github中文官网网页csv文件格局,然后上传approve到Dr通信人家园opBox。下面的Razor代码没有什么特别之处,但包括一个用户输入的表单。当用户完结表格并点击**”提交**”按钮时,OnFormSubmappearittedAsyhttps协议nc 作业被触通信工程发(安全教育平台第3行)。

<div class="container-sm">
  <h1>Blazor Lead Capture</h1>
  <form class="clearfix" @onsubmit="OnFormSubmittedAsync">
    <fieldset>
      <div>
        <label for="firstName" class="form-label">First name</label>
        <input type="text" class="form-control" id="firstName" name="firstName" placeholder="Justin" value="@userInfo.FirstName" @onchange="@(e => OnFieldChanged(e, "firstName"))" />
      </div>
      <div>
        <label for="lastName" class="form-label">Last name</label>
        <input type="text" class="form-control" id="lastName" name="lastName" placeholder="Yoo" value="@userInfo.LastName" @onchange="@(e => OnFieldChanged(e, "lastName"))" />
      </div>
    </fieldset>
    <fieldset>
      <div>
        <label htmlFor="email" class="form-label">Email</label>
        <input type="email" class="form-control" id="email" name="email" placeholder="bar@email.com" value="@userInfo.Email" @onchange="@(e => OnFieldChanged(e, "email"))" />
      </div>
      <div>
        <label htmlFor="phone" class="form-label">Phone</label>
        <input type="phone" class="form-control" id="phone" name="phone" placeholder="555-555-555" value="@userInfo.Phone" @onchange="@(e => OnFieldChanged(e, "phone"))" />
      </div>
    </fieldset>
    <fieldset>
      <button type="submit" class="btn btn-@componentUIInfo.ButtonColour" disabled="@(componentUIInfo.Submitting || string.IsNullOrWhiteSpace(userInfo.FirstName) || string.IsNullOrWhiteSpace(userInfo.LastName) || string.IsNullOrWhiteSpace(userInfo.Email) || string.IsNullOrWhiteSpace(userInfo.Phone))">
        <span>Submit</span>
        <span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
      </button>
    </fieldset>
  </form>
  <div class="alert alert-@componentUIInfo.AlertResult">
    <h2>@componentUIInfo.MessageResult</h2>
    <button type="reset" class="btn btn-dark" @onclick="ResetFields">
      <span>Start Over?</span>
    </button>
  </div>
</div>

下面的@code { ... } 块是与Razor组件交互的C#代码。为了简洁起见,我留下通讯行程卡下载app了两个办法。第一个办法是作业处理程序,OnFo通信大数据行程卡rmSubmittedAsync ,由**安全教育手抄报安全教育平台登录入口提交**”通信技术按钮触发。然后,在作业处理程序中,它调用了安全教育日S通信技术aAPPveTo安全工程师DropboxAsync 办法,它担任一切的作业,https认证包括获取拜访令approve牌和DropBox保存。

@code {
    ...
    protected async Task OnFormSubmittedAsync(EventArgs e)
    {
        ...
        await SaveToDropboxAsync().ConfigureAwait(false);
    }

SaveTogithub下载DropboxAsync 办法中,它通讯大数据行程卡首要取得APIM_Endpoint 的环境变github中文社区量(第4行)。Blazor WASM将一切的环安全教育渠道登录境变量存储在a安全教育渠道登录进口ppse安全教育手抄报ttings.js安全工程师on 文件中,我将在后边评论这个问题。经过从appsettings.js通信行程卡on 中调用APIM端点,运用程序取得了DropBox的拜访令牌(第7行),而DropBox客户端实例安全教育日则上传了数HTTPS据。

    private async Task SaveToDropboxAsync()
    {
        // Gets the APIM endpoint from appsettings.json
        var requestUrl = Configuration.GetValue<string>("APIM_Endpoint");
        // Gets the auth token from APIM
        var token = await Http.GetStringAsync(requestUrl).ConfigureAwait(false);
        // Builds contents.
        var path = $"/submissions/{DateTimeOffset.UtcNow.ToString("yyyyMMddHHmmss")}.csv";
        var contents = $"{userInfo.FirstName},{userInfo.LastName},{userInfo.Email},{userInfo.Phone}";
        var bytes = UTF8Encoding.UTF8.GetBytes(contents);
        // Uploads the contents.
        var result = default(FileMetadata);
        using(var dropbox = new DropboxClient(token))
        using(var stream = new MemoryStream(bytes))
        {
            result = await dropbox.Files.UploadAsync(path, WriteMode.Overwrite.Instance, body: stream).ConfigureAwait(false);
        }
        ...
    }
}

让我appear们看一下包括APIM_APPEndpoint 环境变量的appsettingsgithub下载.jgithub开放私库son 文件。该值通信工程专业是用于获取DropBox拜访令牌的APIM端appetite点。

{
  "APIM_Endpoint": "https://<APIM_NAME>.azure-api.net/dropbox-demo/token?subscription-key=<APIM_SUBSCRIPTION_KEY>"
}

在你的本地机器上运转Blazor WASM运用程序。

dotnet watch run

然后,打HTTPSapproach开你的网络浏览器,appreciate输入https://locaappointm安全entlhost:5001 ,你会看到这样的页面。

Azure API办理中高效的OAuth授权办理

通信达写表格并点击**”提交**安全工程师“按钮,运用程序将把表格的详细信息保存通讯行程卡下载a通信技术pp到DropBoxappear。然后,假如你翻开你的网络浏览器的开发工具,你能够看到B通讯工程lazor WASM运用程序怎么调用APIM端apple点。

Azure API办理中高效的OAuth授权办理

而API调用将拜访令牌回来给DropapproachBox。

Azure API办理中高效的OAuth授权办理

有了这个拜访令牌,您就能够创立application和存储一个文件。这便是成果。

Azure API办理中高效的OAuth授权办理

你能够回忆一下,DropBox没有Oapplication安全模式怎么解除Auth授权的代码。相反,它从直接取得拜访令牌的API调用开通信技术端。那么,代码如安在取得拜访令牌之前删去一切的预检代码呢?这便是这篇文章中说到的新的APIM授权功用。简而言之,APIM实例在内部代表Blazor WASM运用执行一切OAuth相关的流程,并简略地回来拜访令牌。

Azure API办理实例GitHub

安全appstore咱们来评论一下新的APIM功用。你能够点击下面的按钮,一次性将一切资源配置到A通信行程卡下载appzure上。

Azure API办理中高效的OAuth授权办理

另外,你也能够运转下面声明的bicep文件。appstore让咱们进安全教育手抄报一步了解一下bicep文件。首安全先,声明APIM实例。你可能会注意到apple,它启用了办理身份功用(第13-15行),我将在本篇文章后边评论。为了方便起见,将APIM实例命名为token-store-demo-apim ,并将位置设置为West Central US 。该规则的appearance资源组被设置为rg-token-s通讯github下载大数据行程卡tore-demo

// APIM instance
resource apim 'Microsoft.ApiManagement/service@2021-08-01' = {
  name: 'token-store-demo-apim'
  location: 'westcentralus'
  sku: {
    name: 'Developer'
    capacity: 1
  }
  properties: {
    publisherName: 'John Doe'
    publisherEmail: 'john.doe@nomail.com'
  }
  identity: {
    type: 'SystemAssigned'
  }
}

下一步是CORS战略安全期计算器,因为Azure SWA直接approv安全教育日e调用APIM端点。在inb安全教育渠道登录ogithub官网und 节点内,增加cors 节点,在其下增加allowed-origi通讯大数据行程卡ns 节点,并增加origin 节点,其值为* 。确保这只是为了演示目的。你应该增加特https域名定的URh通信人家园ttps和http的差异L,appearance以便在上apple线后有更好的安全性。

// Service Policy
resource apim_policy 'Microsoft.ApiManagement/service/policies@2021-08-01' = {
  parent: apim
  name: 'policy'
  properties: {
    value: service_policy
    format: 'xml'
  }
}
// Service Policy Definition
var service_policy = '''
<policies>
    <inbound>
        <cors allow-credentials="false">
            <allowed-origins>
                <origin>*</origin>
            </allowed-origins>
            <allowed-methods>
                <method>GET</method>
                <method>POST</method>
            </allowed-methods>
        </cors>
    </inbound>
    <backend>
        <forward-request />
    </backend>
    <outbound />
    <on-error />
</policies>'''

在声明了APIM实例之后,界说一个安全教育github中文社区渠道登录API和它的操作。API的servic安全教育日eUrl 被设置为DropBox API的基本URL,操作端点被设置为通讯工程专业/token ,回来拜github汤姆访令牌。因而,整个APIM端点可能看起来像https://token-storgithub永久回家地址e-demo-apihttps安全问题m.az安全教育平台作业登录ure-api.net/dropbox-demo/token

// API
resource api 'Microsoft.ApiManagement/service/apis@2021-08-01' = {
  name: 'dropbox-demo'
  parent: apim
  properties: {
    serviceUrl:'https://api.dropboxapi.com'
    path: 'dropbox-demo'
    displayName:'dropbox-demo'
    protocols:[
      'https'
    ]
  }
}
// Operation
resource api_gettoken 'Microsoft.ApiManagement/service/apis/operations@2021-08-01' = {
  name: 'gettoken'
  parent: api
  properties: {
    method: 'GET'
    urlTemplate: '/token'
    displayName: 'gettoken'
  }
}

但是,这个端点在DropBox API上appearance并不存在。因而,增加操作战略以使该操作作业。

// Operation Policy
resource api_gettoken_policy 'Microsoft.ApiManagement/service/apis/operations/policies@2021-08-01' = {
  parent: api_gettoken
  name: 'policy'
  properties: {
    value: operation_token_policy
    format: 'xml'
  }
}

下面的操作战略的XAPPMLappea通信行程卡下载appr文档解释了这个APIM的新功用的核心思维。在inbouhttps认证通讯人家乡nd 下增加get-authorization-conteapplicationxt 节点。它有以下属通讯地址是写什么地址性。

  • providerhttps认证-id:dropbox-demo
  • authorizahttps认证APPtion安全教育手抄报讯地址是写什么地址-id:auth
  • context-variable-name:ghttps和http的区别ithub下载auth-context
  • identity-type:managed

正如你所看approve到的,APIM实例现已启用了与identity-type 对应的办理身份功用。provider-i通讯行程卡dauthori通讯工程专业sation-id 都将在后边运用。context-variable-name 特点被设置为aut通讯工程专业h-congithub直播平台永久回家texthttps域名它被用在持有安全教育渠道作业登录拜访令https认证牌值的returnht安全生产法tps安全问题-response 节点中。总的来说,这个操作战略代表SWA运用程APP序来获取拜访令牌。

// Operation Token Policy Definition
var operation_token_policy = '''
<policies>
    <inbound>
        <base />
        <get-authorization-context provider-id="dropbox-demo" authorization-id="auth" context-variable-name="auth-context" ignore-error="false" identity-type="managed" />
        <return-response>
            <set-body>@(((Authorization)context.Variables.GetValueOrDefault(&quot;auth-context&quot;))?.AccessToken)</set-body>
        </return-response>
    </inbound>
    <backend>
        <base />
    </backend>
    <outbound>
        <base />
    </outbound>
    <on-error>
        <base />
    </on-error>
</policies>'''

你现已界说了APIM实例。现在,你需求安全教育日为Blazohttps和http的差异r WASM运用供给SWA运用实例。

Azure静态Web运用实例

为了保管Blazor安全模式怎么解除 WASM运用,你需求配置一个Azure SWA实例。下面是它的二进制代码。首要,给运用程序命名为token-stohttps认证re-demo-blazAPPor-github开放私库swa ,并在rg-token-store-demo 的资源组下设置Central US 的位置。

// SWA instance
resource sttapp 'Microsoft.Web/staticSites@2021-02-01' = {
  name: 'token-store-demo-blazor-swa'
  location: 'centralus'
  sku: {
    name: 'Free'
  }
  properties: {
    allowConfigFileUpdates: true
    stagingEnvironmentPolicy: 'Enabled'
  }
}

Blazor WASM运用布置到Azure静态Web运用实例上

你现已有了新的ASWA实例。现在是布置Blazor WAS通信大数据行程卡M运用程序github汤姆的时分了,它安全工程师坐落src/frontend/blazor 目录中。第一步应该通讯HTTPS增加appsettinghttps协议s.json ,该文件包括拜访令牌的APIM端点。下面的指令安全生产法是怎么取得APIM的端点URL。

# Get APIM gateway URL
rg_name=rg-token-store-demo
apim_name=token-store-demo-apim
gateway_url=$(az apim show -g $rg_name -n $apim_name --query "gatewayUrl" -o tsv)
# Get APIM subscription key
subscription_id=$(az account show --query "id" -o tsv)
apim_secret_uri=/subscriptions/$subscription_id/resourceGroups/$rg_name/providers/Microsoft.ApiManagement/service/$apim_name/subscriptions/master/listSecrets
api_version=2021-08-01
subscription_key=$(az rest --method post --uri $apim_secret_uri?api-version=$api_version | jq '.primaryKey' -r)
# Build APIM endpoint
apim_endpoint=$gateway_url/dropbox-demo/token?subscription-key=$subscription_key

APIM的端点URL终究落在了apim_endpoint 这个变量中。application因而,将github汤姆src/frontend/blazor/wwwroot 目录下的appgithub官网登陆进口settings.sample.json 文件重命名为appsettings.json ,并更新端点。

{
  "APIM_Endpoint": "<apim_endpoint>"
}

构建并创立Blazor WASM运用程序的构件。

dotnet restore ./src/frontend/blazor
dotnet build ./src/frontend/blazor
dotnet publish ./src/frontend/blazor -c Release -o ./src/frontend/blazor/bin

还有一个布置的步骤。经过appstore运转下面的指令取得布置密钥。

swa_key=$(az staticwebapp secrets list 
    -g rg-token-store-demo 
    -n token-store-demo-blazor-swa 
    --query "properties.apiKey" -o tsv)

终究,经过运转该指令来布置Blazor WASM运用程序。

swa deploy -a ./src/frontend/blazor/bin/wwwroot -d $swa_key --env default

虽然到现在为止一切都很顺畅,但在提交表HTTPS格后,你能够看到下面的过错。

Azure API办理中高效的OAuth授权办理

这是因为你还没有对DropBox运用通讯行程卡程序进行赞同。终究一步将是赞同。

DropBox运用程序的赞同

依照此文件创立DropBox运用程序,你会得到App keyApp secretgithub官网

Azure API办理中高效的OAuth授权办理

你需求这两个值在APIM实例内进行赞同。点击刀片处的**”授权(预览)**”。

Azure API办理中高效的OAuth授权办理

现在还没有授权运用。因而,点击**”创立**”按钮。

Azure API办理中高效的OAuth授权办理

你能够回忆一下你是怎么为操作安全出产法战略设置get-authorgitgithub直播平台永久回家hub直播渠道永久回家isation-context 结点的。现在是运用它们的时分了。

  • 供给商称号栏中输入dropbox-demo
  • 身份供给者字段中挑选DropBox
  • 客户ID字段中输入DropBox的运用安全教育渠道登录进口程序密钥值。
  • 在 “客户隐秘“字段中输入DropBox运用程序的安全值。
  • 在 “规模“字段中输入files.metadata.write files.content.write file安全期计算器s.content.read
  • 在”授权称号”字段中输入auth

Azure API办理中高效的OAuth授权办理

点击”创立”按钮,取得重定向URL。

Azure API办理中高效的OAuth授权办理

将重定向URL增加到DropBox运用程序中。

Azure API办理中高效的OAuth授权办理

回到APIapplicationM实例,登录到DropBox运用程序。然后,接连点击**”继续**”、“答应“和*github官网*”答应通信人家园拜访”按钮,进行弹出的窗口。

Azure API办理中高效的OAuth授权办理

然后,你会看到成功信息。

Azure API办理中高效的OAuth授权办理

现在DropBox运用程序现已被授权。但安全教育手抄报https安全问题通讯大数据行程卡APIM实例还没有被授权访安全教育渠道登录进口github是什么DropBox运用程序。因为APIM实例现已启用了身份办理功用,让咱们来安全运用它。挑选”办理身份”并点击”增加成员”按钮。通信地址

Azure API办理中高效的OAuth授权办理

找到APIM实例并增加它。

Azure API办理中高效的OAuth授权办理

现在,A通信人家园PIM和DropBox都能够互相通讯了。

Azure API办理中高效的OAuth授权办理

GitHub能看到DropBox运用程序被授权安全教育appearance渠道登录进口吗?

Azure API办理中高效的OAuth授权办理

让咱们测安全生产法试一下端点是否真的能作业。依照菜单”APIs”➡️”Dropbox-demo”➡️”gettoken”,点击”Send”按钮。

Azure API办理中高效的OAuth授权办理

然后你会看到拜访令牌成功发出。

Azure API办理中高效的OAuth授权办理

让咱们回到ASWA运用中,填写表格。这次没有过错了。

Azure API办理中高效的OAuth授权办理

并且上传的文件出现在DropBox上!

Azure API办理中高效的OAuth授权办理

到现在appear为止,咱们现已评论了Azgithub直播平台永久回家ure API办理https域名的新OAuth授权功用。终究,appear咱们需求经过OAuth进程取得拜访令牌。APIM执安全期计算器行这个进程。因而,咱们能够不在咱们的运安全教育平台登录用中完成这一功用,从而节省大量的时间。因为它现在处于预览阶段,一些功用可能现已准备好了,但它们会被不断改进。

假如你想了解更多关于这个APIM OAuth授权办理功用,请拜访下面的文档。apple

  • Azure API办理授通讯人家乡权办理

发表评论

提供最优质的资源集合

立即查看 了解详情