2016-07-21 12 views
1

私はAzure B2Cを使用しており、1つのアイデンティティプロバイダ(LinkedIn)が設定されています。 Web API(b2c bearer auth)とWeb App MVC(b2c Open Id)があります。Azure B2C永続Cookie

私は永続的なログインを作成しようとしています。つまり、ユーザーは指定したデバイスとブラウザから90日ごとにLinkedInを使用してログインできます。

更新:AzureのB2C GAに基づいて更新されたコード、私はそれを有効にするには、WebアプリケーションにIsPersistent =真のコードを追加したとき

私が得ている最も近いです。私はプレビューでであったところ達成するために、私はまだ属性を承認カスタムを使用しますが、コードが更新されました:

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
      filterContext.HttpContext.GetOwinContext().Authentication.Challenge(
      new AuthenticationProperties() 
      { 
       IsPersistent = true 
      }); 
     base.HandleUnauthorizedRequest(filterContext); 
    } 

しかし、これは約1時間のためにのみ有効です。おそらく、アクセス&のIDポリシーに従っていますか?リフレッシュトークンに制限がありません - 私は "IsPersistent"の理由が1時間しかわかりません。

Token Session Config in Azure

だから、これらの質問につながる:

  1. は、私はAzureのB2C(OpenIDの接続)を達成することができます何か永続セッション(60-90日)ですか?
  2. もしそうなら、私が紛失しているものに関するすべてのポインタ?カスタムCookieの検証を行う必要がありますか?リフレッシュトークンのあるもの(私はWeb APIのために使用しますが、Webアプリケーションのカスタムは何も使用しません)。

どのような思考や入力が素晴らしいでしょう!

答えて

0

私がやった後、B2Cとの永続的なセッションを達成することができました次:

  1. カスタム認可は属性

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { filterContext.HttpContext.GetOwinContext().Authentication.Challenge( new AuthenticationProperties() { IsPersistent = true }); base.HandleUnauthorizedRequest(filterContext); }

  2. 使用Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory BootstrapContextの代わりに(基本的にGA前のコードサンプル(変更履歴の表示) - >https://github.com/AzureADQuickStarts/B2C-WebApp-WebAPI-OpenIDConnect-DotNet)。 ADALライブラリは、自分のコードにトランスペアレントな適切なトークンを取得します。

  3. 実装カスタムTokenCache(ベースここEFADAL例:https://github.com/Azure-Samples/active-directory-dotnet-webapp-webapi-multitenant-openidconnect/blob/master/TodoListWebApp/DAL/EFADALTokenCache.cs

  4. 変更Startup.Auth.cs:

    return new OpenIdConnectAuthenticationOptions 
    { 
        MetadataAddress = String.Format(aadInstance, tenant, policy), 
        AuthenticationType = policy, 
        UseTokenLifetime = false, 
        ClientId = clientId, 
        RedirectUri = redirectUri, 
        PostLogoutRedirectUri = redirectUri, 
        Notifications = new OpenIdConnectAuthenticationNotifications 
        { 
    
         AuthenticationFailed = OnAuthenticationFailed, 
         AuthorizationCodeReceived = OnAuthorizationCodeReceived, 
        }, 
        Scope = "openid offline_access", 
        ResponseType = "code id_token", 
    
        TokenValidationParameters = new TokenValidationParameters 
        { 
         NameClaimType = "name", 
         SaveSigninToken = true, 
    
        }, 
    }