Microsoft.OData.Clientでフォーム認証を行う

公開日: : Blog, Microsoft , , , , , ,

構成

  • サーバー
    ** Azure API Apps
    ** ASP.NET Web API
  • クライアント
    ** UWP
    ** Microsoft.OData.Client

ODataについては以下
UWPとAzure Web AppsでOData

サーバー

  • 作成済みのODataControllerにAuthorize属性を付与
[Authorize]
public class SecureModelsController : ODataController
{
    private ODataAPISampleContext db = new ODataAPISampleContext();

    // GET: odata/SecureModels
    [EnableQuery]
    public IQueryable<SecureModel> GetSecureModels()
    {
        return db.SecureModels;
    }

    // GET: odata/SecureModels(5)
    [EnableQuery]

  • Web.configに認証方法を宣言
<system.web>
  <!-- 省略 -->
  <authentication mode="Forms" />
</system.web>
  • 認証処理用のAPIコントローラーを新規作成(Authorizeなし)

クライアント

  • 認証処理
    CookieContainerを作成して認証処理する。
    作成したCookieContainerはODataコンテナーの作成時に使う
private CookieContainer SharedCookie = null;

/// <summary>
/// 認証ボタン
/// </summary>
private async void btnAuth_Click(object sender, RoutedEventArgs e)
{
    var info = new AuthInfo { Id = "test", Pass = "test" };
    var content = new StringContent(JsonConvert.SerializeObject(info));
    content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
    
    SharedCookie = new CookieContainer();
    var client = new HttpClient(new HttpClientHandler { CookieContainer = SharedCookie });
    
    var response = await client.PostAsync(ROOT_URL + "api/auth", content);
    var msg = new MessageDialog(response.StatusCode.ToString());
    await msg.ShowAsync();
    return;
}
  • ODataコンテナーの使用
/// <summary>
/// ODataのロード処理(要事前認証)
/// </summary>
private async void btnOData_Click(object sender, RoutedEventArgs e)
{
    //認証対応したコンテナの作成
    var context = new Container(new Uri(ROOT_URL + "odata"));
    context.SendingRequest2 += (sender2, e2) =>
    {
        var request = ((HttpWebRequestMessage)e2.RequestMessage).HttpWebRequest;
        request.CookieContainer = SharedCookie;
    };

    //レコード取得
    foreach (var record in await context.SecureModels.ExecuteAsync())
    {
        list.Items.Add(record.Name);
    }
}

関連記事

SIPSorceryにて、「型 ‘log4net.ILog’ が参照されていないアセンブリで定義されています。」

ある時、SIPクライアントの開発を行っていた。 SIPクライアントライブラリの選定にあたって S

記事を読む

【ストアアプリ】バッジ通知(BadgeUpdateManager)について

こんにちは。 前回のタイル通知にバッジ通知を追加しました。 以下を参考に。 https

記事を読む

no image

【VB.NET】DataGridViewで行の最大高を設定

DataGridViewにおける行の最大高さを設定するメモ 最大高さに満たない場合は内容を全て表示

記事を読む

【XAML】フォントサイズを自動縮小して全体を表示

Viewboxを親にするだけ。 拡大・縮小方法はStretch, StretchDirec

記事を読む

no image

【UWP】矢印キーでのフォーカス移動

FocusManagerで上下左右のフォーカス遷移が出来るので、その仕組みを利用してやるビヘイビアを

記事を読む

no image

No registered resource provider found for location ‘Japan East’ and API version ‘2.0’ for type ‘servers’.

Visual Studio から Azure Web Apps をデプロイするときに発生したエラーの

記事を読む

Visual Studio 2015 Update1 の Xamarin.Forms でインテリセンスを使いたい

Xamarinを触り始めました。 チュートリアルということで、Xamarin.Forms Quick

記事を読む

WordPressでスパムコメント対策

WordPressのスパムコメント対策を行ったのでメモ。 標準でAkismetがインストール済み(

記事を読む

no image

Microsoft Bot Frameworkでテキストメッセージではなく、添付ファイルを使用する

activity.Attachmentsに添付ファイル入っている。 ContentTypeで画像か判

記事を読む

no image

【Swift】SecItemCopyMatchingで複数件を処理

SecItemCopyMatchingを使ってKeyChainからデータを取得する時に 全件取得し

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PAGE TOP ↑