2

ASP.NET MVC4 Web サイトに Microsoft ID を使用して OAuth 認証を実装しようとしています。これまでのところ、Microsoft アカウントでのログインは機能しています。しかし、追加のユーザー データ (具体的には、ユーザー アカウントまたは優先メール アドレス) を取得する必要があります。

メール サービスとして live.domains を使用しています。そこで、自分のドメインでユーザー向けのメールを作成しました。次に、これらのユーザーがメール アカウントを使用して (OAuth を使用して) サイトにログインできるようにします。

注:私のWebサーバーはasp.net 4.5をサポートしていないため、4.0で立ち往生しており、ASP.NET用のLiveSDKを使用できません(私の知る限り)...

アイデアは次のようなものです:

  • 組み込みの OAuth 機能を使用してユーザーをログインさせる
  • アカウントのメールアドレスを取得し、それが私のドメインからのメールかどうかを確認します
  • 私のドメインからのものでない場合は、登録を拒否します
  • 電子メールが私のドメインからのものである場合、ユーザーが登録して通常どおり続行できるようにします

デフォルトを参照として使用してカスタム Microsoft OAuth2Client を作成し (デフォルト クライアントはgithubにあります)、必要なスコープ (wl.basic、wl.signin、wl.emails) を指定しました。コードの残りの部分はほとんど同じです。

public MyMicrosoftClient(string appId, string appSecret)
    : this(appId, appSecret, new string[] {"wl.basic", "wl.signin", "wl.emails"})
{
}

GetUserData 関数は、追加のユーザー データ (名前、性別など) を取得するために使用され、機能します。デフォルト クライアントからのコード:

protected override IDictionary<string, string> GetUserData(string accessToken)
{
    MicrosoftClientUserData graph;
    var request =
        WebRequest.Create("https://apis.live.net/v5.0/me?access_token=" + CustomHelpers.EscapeUriDataStringRfc3986(accessToken));
using (var response = request.GetResponse())
{
    using (var responseStream = response.GetResponseStream())
    {
        graph = JsonHelper.Deserialize<MicrosoftClientUserData>(responseStream);
    }
}

var userData = new Dictionary<string, string>();
userData.Add("id", graph.Id == "" ? null : graph.Id);
userData.Add("username", graph.Name == "" ? null : graph.Name);
userData.Add("name", graph.Name == "" ? null : graph.Name);
userData.Add("link", graph.Link == null ? null : graph.Link.AbsoluteUri);
userData.Add("gender", graph.Gender == "" ? null : graph.Gender);
userData.Add("firstname", graph.FirstName == "" ? null : graph.FirstName);
userData.Add("lastname", graph.LastName == "" ? null : graph.LastName);

return userData;

}

私の理解では、これは(指定されたスコープに基づいて)要求されたすべてのユーザーデータを取得するため、応答に電子メールも含める必要があります。残念ながら、たとえそうであっても、応答ストリームからその情報を取得する方法がわかりません...

では、応答からの電子メールをどのように読むことができますか (正しい軌道に乗っている場合)。

4

0 に答える 0