在开发一个运用程序时,大多数时分,你运用API调用来发送和接纳信息。因而,你应该遵循一个认证和授权进程来运用API,除非它是公共API。这https域名些认证/授权进程运用1)一个认证密钥或2)一个经过安全教育日OAuth进程的拜访令牌。
运用auth密钥的办法,你能github开放私库够把它存储在一个安全的地https域名方,比方通信达Azure密钥库github官网服务,然后获取通信达密安全教育平台登录入口钥。这是一个相对github直播平台永久回家简略的进程。可是,假如你需APP要运用OAuth流程通信大数据行程卡,通信地址就会因为下appetite面的授权流程而变得复approve杂。下面github汤姆是概念性的OAuth流程。
- 恳求一个approve授权码
- 收到授权码
- 经过供给GitHub授权码来恳求一个拜访令牌
- 收到拜访令牌和改写令牌
- 经过供给拜访令牌来调用APIAPP恳求
- 接纳API响应
- 一旦现有的拜访令牌过期apple,经过供给改GitHub写令牌恳求新的拜访令牌
- 收到新的拜访令牌和新的改appreciate写令牌
- 经过供给新的拜访令牌来调用API恳求安全教育手抄报
- 接纳API响应
假如你想了解更多关于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
,你会看到这样的页面。
填通信达写表格并点击**”提交**安全工程师“按钮,运用程序将把表格的详细信息保存通讯行程卡下载a通信技术pp到DropBoxappear。然后,假如你翻开你的网络浏览器的开发工具,你能够看到B通讯工程lazor WASM运用程序怎么调用APIM端apple点。
而API调用将拜访令牌回来给DropapproachBox。
有了这个拜访令牌,您就能够创立application和存储一个文件。这便是成果。
你能够回忆一下,DropBox没有Oapplication安全模式怎么解除Auth授权的代码。相反,它从直接取得拜访令牌的API调用开通信技术端。那么,代码如安在取得拜访令牌之前删去一切的预检代码呢?这便是这篇文章中说到的新的APIM授权功用。简而言之,APIM实例在内部代表Blazor WASM运用执行一切OAuth相关的流程,并简略地回来拜访令牌。
Azure API办理实例GitHub
让安全appstore咱们来评论一下新的APIM功用。你能够点击下面的按钮,一次性将一切资源配置到A通信行程卡下载appzure上。
另外,你也能够运转下面声明的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通讯行程卡d
和authori通讯工程专业sation-id
都将在后边运用。context-variable-name
特点被设置为aut通讯工程专业h-congithub直播平台永久回家text
。https域名它被用在持有安全教育渠道作业登录拜访令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("auth-context"))?.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格后,你能够看到下面的过错。
这是因为你还没有对DropBox运用通讯行程卡程序进行赞同。终究一步将是赞同。
DropBox运用程序的赞同
依照此文件创立DropBox运用程序,你会得到App key
和App secretgithub官网
。
你需求这两个值在APIM实例内进行赞同。点击刀片处的**”授权(预览)**”。
现在还没有授权运用。因而,点击**”创立**”按钮。
你能够回忆一下你是怎么为操作安全出产法战略设置get-authorgitgithub直播平台永久回家hub直播渠道永久回家isation-context
结点的。现在是运用它们的时分了。
- 在供给商称号栏中输入
dropbox-demo
。 - 在身份供给者字段中挑选
DropBox
。 - 在客户ID字段中输入DropBox的运用安全教育渠道登录进口程序密钥值。
- 在 “客户隐秘“字段中输入DropBox运用程序的安全值。
- 在 “规模“字段中输入
files.metadata.write files.content.write file安全期计算器s.content.read
。 - 在”授权称号”字段中输入
auth
。
点击”创立”按钮,取得重定向URL。
将重定向URL增加到DropBox运用程序中。
回到APIapplicationM实例,登录到DropBox运用程序。然后,接连点击**”继续**”、“答应“和*github官网*”答应通信人家园拜访”按钮,进行弹出的窗口。
然后,你会看到成功信息。
现在DropBox运用程序现已被授权。但安全教育手抄报https安全问题是通讯大数据行程卡APIM实例还没有被授权访安全教育渠道登录进口问github是什么DropBox运用程序。因为APIM实例现已启用了身份办理功用,让咱们来安全运用它。挑选”办理身份”并点击”增加成员”按钮。通信地址
找到APIM实例并增加它。
现在,A通信人家园PIM和DropBox都能够互相通讯了。
你GitHub能看到DropBox运用程序被授权安全教育appearance渠道登录进口吗?
让咱们测安全生产法试一下端点是否真的能作业。依照菜单”APIs”➡️”Dropbox-demo”➡️”gettoken”,点击”Send”按钮。
然后你会看到拜访令牌成功发出。
让咱们回到ASWA运用中,填写表格。这次没有过错了。
并且上传的文件出现在DropBox上!
到现在appear为止,咱们现已评论了Azgithub直播平台永久回家ure API办理https域名的新OAuth授权功用。终究,appear咱们需求经过OAuth进程取得拜访令牌。APIM执安全期计算器行这个进程。因而,咱们能够不在咱们的运安全教育平台登录用中完成这一功用,从而节省大量的时间。因为它现在处于预览阶段,一些功用可能现已准备好了,但它们会被不断改进。
假如你想了解更多关于这个APIM OAuth授权办理功用,请拜访下面的文档。apple
- Azure API办理授通讯人家乡权办理