私の目標は、Azure ADを使用してAzure Functionsを保護し、WPFアプリケーションからそれらを呼び出すことです。
次の定義のAzure関数があります。
public IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)]
HttpRequest req,
ILogger log,
ExecutionContext context,
ClaimsPrincipal claimsPrincipal)
Azure ADアプリを登録し、ネイティブアプリ認証の設定を構成しました。
API権限も追加しました
アプリを認証/承認ブレードのAzure Functionsアプリに関連付けました。
このようなAzure ADからWPFアプリでトークンを取得しています(Microsoft.Identity.Clientライブラリを使用)
string applicationID = "***"; // My AppID Guid
PublicClientApp = PublicClientApplicationBuilder.Create(applicationID)
.WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
.Build();
var listScopes = new List<string>
{
//"user.read" - Removed based on @tony-yu recommendation
$"api://{applicationID}/MyScope"
};
var authResult = await PublicClientApp.AcquireTokenInteractive(listScopes)
.ExecuteAsync();
var myToken = authResult.AccessToken;
私は問題なく認証でき、トークンを正常に取得していますが、関数を呼び出してAuthorizationヘッダー(Authorization = Bearer ****)にトークンを提供すると、次のようになります。
401-このディレクトリまたはページを表示する権限がありません。
これが私がそれをどのように呼ぶかです(Postman):
呼び出しが戻ったときのWWW-Authenticateヘッダーの内容は次のとおりです
取得したトークンを確認すると合法のようです
私が間違っていることは何か考えていますか?
だから私は最終的にこれのおかげでそれを機能させました SO記事 ここで ambrose-leung
スコープが正しくありません。広告で保護されている関数にアクセスしたいので、使用する必要があります
var listScopes = new List<string>
{
"{applicationID}/.default"
};
代わりに。
user.read
は、Microsoft Graph APIの権限です。