2017-05-10 12 views
1

私のb2cには2つのWeb API(AとB)があります。それぞれが独自のアクセス許可(scopeA1、scopeA2)と(scopeB1、scopeB2)をパブリッシュします。複数のウェブAPIの範囲

認証時に両方のapiの認証コードを取得するために、私のWebアプリケーション(既に設定済みで、apiと4つのスコープの両方にアクセス許可を与えています)では、OpenIdConnectAuthenticationOptionsinスコープのプロパティを4に設定しようとしましたスコープ エラーが発生しました。AADB2C90146:要求で指定された 'scopeA1 scopeA2 scopeB1 scopeB2 openid offline_access'は、サポートされていないアクセストークンに対して複数のリソースを指定しています。

私が指定した場合のみ、ウェブAPIのAまたはBのためのスコープ間は、それは私が私のWebアプリは、両方のウェブが両方

ありがとう付与された権限でも、APIを使用して取得するにはどうすればよいthis link

あたりとして働きます助けを求めて

答えて

0

Azure ADで2つのWeb APIが別々のアプリケーションである場合は、アクセストークンを個別に要求する必要があります。

私はあなたが出発点として使用されたサンプルに慣れていないんだけど、あなたが変更を加える必要があるところ、これらの線があるように見える:

// Retrieve the token using the provided scopes 
ConfidentialClientApplication app = new ConfidentialClientApplication(authority, Startup.ClientId, 
            Startup.RedirectUri, credential, 
            new NaiveSessionCache(userObjectID, this.HttpContext)); 
AuthenticationResult result = await app.AcquireTokenSilentAsync(scope); 

accessToken = result.Token; 

あなたがごとにappインスタンスを作成する必要がありますあなたのAPIを取得し、それぞれのトークンを取得します。次に、APIをどこか別の場所で呼び出すときは、ベアラ認証ヘッダーで正しいアクセストークンを使用します。

+0

Thxをこのフォーマットを使用する方法について

githubの会談。はい、彼らはADの異なるリソースです。私はOWINのパイプラインでそれをどうすればいいですか? – tourili

+0

私の心配が問題ではっきりしているかどうか分かりません。この目的は、ユーザーログイン中にサインインポリシーが実行されているときに、どのように認証コードを取得できるかを確認することです。これは私が別のapis上の異なるスコープを求めたいところです。しかし、OpenIdConnectAuthenticationOptionsのscopeプロパティは、その時点ですべての異なるスコープを取ることはできません(私は前述のAADB2C90146の問題があります)。 – tourili

0

私は同じ問題を持っていたExtend MSAL to support multiple Web APIs

同様の質問をしたが、私は私のAPIの使用同じ認証クライアントID +シークレットの両方を行っている短期的には、それを回避するために、基本的には、答えを持っていませんでしたしたがって、私は私が何をしたいのではない私のAPIS accross

を同じスコープを再利用することができますが、あなたはアズールADのB2Cを使用したい場合は、サポートが

されるまでしばらく妥協に慣れる必要があります - 私はまた、私も使用しているMSALの古いバージョンを使用していると言っている、私はtまで待っている彼はバージョン1のリリース前に再度アップグレードしてください。

https://github.com/AzureAD/microsoft-authentication-library-for-dotnet

Step 1: Add MSAL to your Solution/Project 
Right click on your project > Manage packages. 
Select include prerelease > search msal. 
Select the Microsoft.Identity.Client package > install. 

Step 2: Instantiate MSAL and Acquire a Token 
Create a new PublicClientApplication instance. Make sure to fill in your 
app/client id 
PublicClientApplication myApp = new PublicClientApplication(CLIENT_ID); 
Acquire a token 
AuthenticationResult authenticationResult = await 
myApp.AcquireTokenAsync(SCOPES).ConfigureAwait(false); 

Step 3: Use the token! 
The access token can now be used in an HTTP Bearer request.