2

OpenId で Azure Active Directory 認証を使用する MVC アプリを作成しました。これはエンド ユーザーにとってはうまく機能しますが、独自のエンドポイント (ユーザーが使用するのと同じ http ポスト メソッド) を呼び出す Web ジョブをサイトに追加したいと考えています。サーバー アプリが webapi エンドポイントを呼び出せるようにするこの例https://github.com/AzureADSamples/Daemon-DotNetを見つけました。

私の承認構成クラスは次のようになります。

public class StartAuth
{
    private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
    private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];
    private static string tenant = ConfigurationManager.AppSettings["ida:Tenant"];
    private static string postLogoutRedirectUri = ConfigurationManager.AppSettings["ida:PostLogoutRedirectUri"];
    private static string audience = ConfigurationManager.AppSettings["ida:Audience"];

    string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);

    public void Configuration(IAppBuilder app)
    {
        app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

        app.UseCookieAuthentication(new CookieAuthenticationOptions());

        app.UseOpenIdConnectAuthentication(
            new OpenIdConnectAuthenticationOptions
            {
                ClientId = clientId,
                Authority = authority,
                PostLogoutRedirectUri = postLogoutRedirectUri,
            });

        app.UseWindowsAzureActiveDirectoryBearerAuthentication(
            new WindowsAzureActiveDirectoryBearerAuthenticationOptions
            {
                Tenant = tenant,
                TokenValidationParameters = new TokenValidationParameters
                {
                    ValidAudience = audience
                }
            });
    }
}

Web ジョブ コンソール アプリからの要求は次のようになります (ベアラー キーとホストを置き換えました)。

POST      
https://some-random-host/myendpoint     
HTTP/1.1
Authorization: Bearer key
Host: some-random-host
Content-Length: 0

サーバーからの応答は次のようになります (ホスト、キー、テナント ID を置き換え、場所の値を切り詰めています)。

HTTP/1.1 302 Found
Cache-Control: private
Content-Length: 0
Location: https://login.windows.net/tenant-id/oauth2/authorize....
Server: Microsoft-IIS/8.0
Set-Cookie: OpenIdConnect.nonce.u%noncekey; path=/; secure; HttpOnly
WWW-Authenticate: Bearer
X-AspNetMvc-Version: 5.2
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Set-Cookie: ARRAffinity=key;Path=/;Domain=some-random-host
Date: Thu, 19 Mar 2015 11:44:11 GMT

サーバーがログイン場所で応答している理由はありますか? これは明らかに、ユーザーが認証されたエンドポイントにアクセスしようとするとうまく機能しますが、私のコンソール アプリでは機能しません。

事前にご協力いただきありがとうございます。他に役立つ情報があれば教えてください。

4

2 に答える 2

1

詳細を説明する関連するブログ投稿の 1 つ:

構成は正しいように見えますが、ハンドラーの定義がありません。

API コントローラー クラスでハンドラーを指定する必要があります。

[HostAuthentication("OAuth2Bearer")]
[Authorize]
public class YourAPIController : ApiController
{

HostAuthentication キーワードは、コントローラーのハンドラーを記述しています。

于 2015-03-20T22:35:23.237 に答える