0

Azure AppサービスにWeb APIをデプロイしています。 Web APIは、Azure ADを使用して保護されています。私はさまざまなユーザーにAPIを公開するためのAPI管理を使用する予定です。Azure API管理とバックエンドWeb API

今、API管理で開発者ポータルの基本認証を有効にしました。また、私はバックエンドサーバ(ユーザ認証)のOAuth 2.0認証を有効にしました。だから、私が開発者ポータルにログインすると、私はサブスクリプションキーと承認の2つのフィールドを見ることができます。サブスクリプションキーは開発者のポータルへのサブスクリプションであり、認可はバックエンドサーバーに必要なOAuth認可になります。

また、任意のユーザーがapi管理URLにアクセスする必要がある場合、ユーザーはクエリ文字列のサブスクリプションキーと認証ヘッダーのトークン(デスクトップクライアントなど)を渡す必要があります。

JWTトークンを使用し、サブスクリプションキーを使用しないで(ただし、どの開発者/ユーザーがサービスにアクセスしたかを知る必要があります)、api managament URLを呼び出す方法はありますか?私が期待しているのは、ユーザーを開発者ポータルに認証するために使用できる単一のトークンであり、バックエンドのAPI(バックエンドサーバートークンへの変換またはその他の手段による)の認証に使用できます。

おかげで、

ジョン

答えて

0

APIMのサブスクリプションキーはユーザと製品に関連付けられているため、サブスクリプションを必要としないように(作成時またはプロダクト設定で使用可能なオプション)プロダクトキーを呼び出す必要はありませんそのような製品に含まれるAPI。

このような呼び出しはすべて、APIMによって匿名として扱われ、アナリティクスにはそのように表示されるという欠点があります。

1

うん、あなたは(ハックのビット)にそれを行うことができます。それにはREST APIを使用する必要があります。具体的にはcallです。私にとっては、既存のAPIを編集することが動作しませんでした(彼らは鍵がまだそこにあった)が、私は新しいAPIを作成したとき、キーがありませんでした。

No 'Ocp-Apim-Subscription-Key'

私はすべてをぼかすために持っていました私のもの、それについて申し訳ありません。だから、それを達成するために、あなたは次のクエリを発行するとよいでしょう:

パス
PUT
https://management.azure.com/subscriptions/ {subscriptionId}/resourceGroups/{} resourceGroupName /providers/Microsoft.ApiManagement/service/ {serviceNameを}/?のAPI/{apiId} APIバージョン= 2016年7月7日&インポート=真&パス= {APIpostfix}

ヘッダ
Authorization = "Bearer TOKEN_GOES_HERE" ## 'ベアラ' の後のスペースは必須あります10 Content-Type = "application/vnd.swagger.link+json" ##リンクしたページに適切な「Content-Type」があるかどうかを調べます。これは、実行中のAPIによって生成された "swagger.json"からAPI定義を直接インポートする例です。

ボディ:

{ 
    "name": "Name", 
    "description": "Desc", 
    "link": "http://url.to/your/swagger.json", ## <<only needed if you import directly from running API 
    "serviceUrl": "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}/backends/{APIpostfix}", ## << declare your API Management backend 
    "protocols": [ 
     "https" 
    ], 
    "authenticationSettings": { 
     "oAuth2": null, 
     "openid": null 
    }, 
    "subscriptionKeyParameterNames": { ## << Magic happens here 
     "header": null, 
     "query": null 
    } 
} 

PS。私はPUT +をswaggerファイルに送信することを心配したことはありませんでしたが、これを知ったときにはかなり簡単です。

+0

あなたが私に言ったことを明確に理解していませんでした。しかし、これをどのように私はどのユーザーがAPI管理サービスを呼び出していたか識別するでしょうか? –

+0

私はsusbscribtionキーを取り除く必要があります。でも、ユーザーの統計情報(つまり、どのユーザーがどのアプリケーションを呼び出しているか)を知る必要があります。私が最初のポストで述べたように、「開発者のポータルにユーザーを認証するために使用できる単一のトークンがあり、バックエンドのAPIに認証するために使用できます(バックエンドサーバーへの変換トークンまたは他の手段で) " –

+0

そのためにJWTを使用してください、問題は何ですか? – 4c74356b41

関連する問題