API

6

にアクセスしようとすると、発行者を検証できません。そこで、私の現在の設定を簡単に説明します。現在の設定はASP.NET Core Identity、IdentityServer4の実装、それによって保護されたAPIリソース、Xamarin.Androidアプリケーションです。クライアント。現在の問題は、クライアント(Android)が(APIログの)次のエラーのためにAPIから何も取得できないことです。API

「ベアラ」は認証されませんでした。失敗メッセージ: "IDX10205:発行者の検証に失敗しました発行元: 'http://10.0.2.2:5000'一致しませんでした:validationParameters.ValidIssuer: 'null'またはvalidationParameters.ValidIssuers: 'http://127.0.0.1:5000'

基本的に私はAndroidエミュレータを使用しているので、マシン上のlocalhost上にあるものを呼び出すために、10.0.2.2のURLを使用する必要があります。次に、問題がポップアップします。アイデンティティ・サーバーは認証で問題なく、正常にログインできますが、アクセス・トークンを取得できますが、その後はAPIを呼び出す必要があります。そしてそれはエラーが起こるところです - それは、同じ権限(127.0.0.1:5000)を持っているが、Androidクライアントのための権限である10.0.2.2:5000を受け取る発行者を期待しています。

私の質問には、10.0.2.2も有効な発行者であることを何とか指定する方法があるのですか、APIとIdentity Serverの両方を配備することについて考え始めなくてはなりません。私が試してみたいすべての小さな事柄に配備するのではなく、ソリューション全体をローカルマシンで実行する方法があれば本当に好きです。

非常に助けになります。

+0

こんにちは!あなたはこれに対して何か解決策を得ましたか? – JayDeeEss

+0

いいえ、それを調べる時間が本当にありませんでした。これまでのところ私の考えは主に、ローカルのIISにアプリをデプロイしてファイアウォールで開くことでした。 5000番ポートに入ってくるものを信用してください。私はたぶん休業日にこれを修正しようとしています。これは、仕事関連のものではなく個人的なプロジェクトのためです。 –

+0

お返事ありがとうございます。ええ、私は最も簡単な方法は、ローカルの開発サーバー上のアプリケーションを展開し、それらのURLにアクセスすることだと思います。それは私が今やっていることだと完璧に働いている! – JayDeeEss

答えて

0

私はローカルネットワーク上に表示されるようにWeb部分を実行するだけで問題を回避することができました。私が詳細に行ったこと - ホストを作成するProgram.csでは.UseUrls("http://*:5001")メソッドを使用して、次にdotnet runでアプリを実行します。

このように、あなたのアプリケーションは、あなたのマシンのIPアドレスとあなたが指定したポートを経由してローカルネットワークからアクセスできます。また、これを機能させるには、使用しているポートを通るトラフィックを許可するために、ファイアウォールに新しい送信ルールを定義する必要があります。これが他の人にも役立つことを願っています。これは私が仕事が必要なものを手に入れるための最も簡単な方法であることが判明しました。

4

最初standardを指定すると、1つの発行者だけを管理できます。

独自のID /トークンの生成を管理していますか?これはそうではないように思えます。

トークンを明示的に作成するようにAPIをカスタマイズすることができます。次に、誰かが同じものに対して検証できるように、グローバル発行者(プロジェクトのURLのような)を指定することができます。

var token = new JwtSecurityToken(
       issuer: "http://my-perfect-proj.net", 
       claims: ..., 
       notBefore: DateTime.Now, 
       expires: DateTime.Now.AddHours(1), 
       signingCredentials: ...) 
      ); 

トークンが作成されて送信された後、受信者の趣味(チェック時刻、ユーザーのデータ、発行者)に基づいて着信要求を検証します。

ASP.NET Core JWT Bearer Token Custom Validation

Creating RESTful API with Authentication

EDIT:同じマシン上XamarinとVisual Studioを使用しては、私にこの種の問題を与えなかったが、その際には、私は、Visual Studioエミュレータを使用していました。あなたは試してみて、他のタイプの回避策を避けることができます。

+0

解決策かもしれませんが、ローカルで実行できるようにするために、このすべてを行う必要はありません。コードベースを変更するのではなく、内部的にAPIを公開する方法ネットワーク。そして、ええ、VSエミュレータは私が今使っているGoogleエミュレータとは違った働きをしますが、私のニーズには痛みが伴うので使用をやめました。しかし、入力のおかげで - 誰かがそれから恩恵を受ける可能性があります。 –