2017-09-20 14 views
0

Xamarinフォームでパスワード変更方法を変更するのが難しいです。私が使用してみました:XamarinフォームでAzure AD B2Cのパスワードを変更する方法

https://graph.windows.net/me/changePassword?api-version=1.6 

それはそれはXamarinの形で作品にするために、参照を見つけるのは難しい、これは私がこれまで持っているものです。

using Newtonsoft.Json; 

namespace KGVC.Models 
{ 
    public class GraphModel 
    { 
     const string ChangePassword = "https://graph.windows.net/me/changePassword?api-version=1.6"; 
     [JsonProperty("currentPassword")] 
     public static string currentPassword { get; set; } 

     [JsonProperty("newPassword")] 
     public static string newPassword { get; set; } 


    } 
} 

...と、ここでパスワード変更のための私のユーザインタフェースである:ここで

は私のモデルである

<?xml version="1.0" encoding="utf-8" ?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
      xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
      x:Class="KGVC.Views.LogoutPage"> 
    <StackLayout HorizontalOptions="Center" VerticalOptions="Center"> 
     <Button x:Name="logoutButton" Text="Logout" Clicked="OnLogoutButtonClicked" /> 
     <Label x:Name="messageLabel" FontSize="Medium" /> 
     <Label Text="Change Password" FontSize="Large" HorizontalOptions="Center" Margin="5"/> 
     <Label Text="Current Password" VerticalOptions="Center" Margin="5"/> 
     <Entry x:Name="currentPassword"/> 
     <Label Text="New Password" VerticalOptions="Center"/> 
     <Entry x:Name="newPassword"/> 
     <Button Text="Change Password" Clicked="ChangePasswordClicked" Margin="20"/> 
    </StackLayout> 
</ContentPage> 

...と、ここで、これまでの私の方法です:

using System.Linq; 
using System.Net.Http; 
using System.Net.Http.Headers; 
using System.Text; 
using System.Threading.Tasks; 
using KGVC.Models; 
using Microsoft.Identity.Client; 
using Xamarin.Forms; 
using Xamarin.Forms.Xaml; 

namespace KGVC.Views 
{ 
    [XamlCompilation(XamlCompilationOptions.Compile)] 
    public partial class LogoutPage : ContentPage 
    { 

     AuthenticationResult authenticationResult; 

     public LogoutPage(AuthenticationResult result) 
     { 
      InitializeComponent(); 
      authenticationResult = result; 
     } 

     protected override void OnAppearing() 
     { 
      if (authenticationResult != null) 
      { 
       if (authenticationResult.User.Name != "unknown") 
       { 
        messageLabel.Text = string.Format("Welcome {0}", authenticationResult.User.Name); 
       } 
       else 
       { 
        messageLabel.Text = string.Format("UserId: {0}", authenticationResult.User.UniqueId); 
       } 
      } 

      base.OnAppearing(); 
     } 
     public void ChangePasswordClicked(object sender, EventArgs e) 
     { 
      var client = new HttpClient(); 
      var request = new HttpRequestMessage(HttpMethod.Post, 
       "https://graph.windows.net/me/changePassword?api-version=1.6"); 
      // request.Headers.Authorization = 
      // new AuthenticationHeaderValue("Bearer", authResult.AccessToken); 
      //var response = await client.SendAsync(request); 
      //var content = await response.Content.ReadAsStringAsync(); 
     } 

     async void OnLogoutButtonClicked(object sender, EventArgs e) 
     { 
      App.AuthenticationClient.UserTokenCache.Clear(Constants.ApplicationID); 
      await Navigation.PopAsync(); 
     } 


    } 
} 

結果は私のログインビューモデルのパラメータで、私のApp.csは

です
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using KGVC.Models; 
using KGVC.Views; 
using Microsoft.Identity.Client; 
using Microsoft.Practices.ServiceLocation; 
using Microsoft.Practices.Unity; 
using Xamarin.Forms; 

namespace KGVC 
{ 
    public partial class App : Application 
    { 

     public static PublicClientApplication AuthenticationClient { get; private set; } 
     public App() 
     { 
      InitializeComponent(); 
      UnityContainer unityContainer = new UnityContainer(); 
      // unityContainer.RegisterType<LoginService>(); 
      ServiceLocator.SetLocatorProvider(() => new UnityServiceLocator(unityContainer)); 
      AuthenticationClient = new PublicClientApplication(Constants.ApplicationID); 
      MainPage = new NavigationPage(new LoginPage()); 
     } 

     protected override void OnStart() 
     { 
      // Handle when your app starts 
     } 

     protected override void OnSleep() 
     { 
      // Handle when your app sleeps 
     } 

     protected override void OnResume() 
     { 
      // Handle when your app resumes 
     } 
    } 
} 

私の問題のために見ることができる参照がありますか、私の方法でここに追加する必要がありますか何か別のものが必要ですか?あなたは、グラフAPIに直接パスワードを変更しようとしているような

答えて

1

ねえ、それは見えます、私はこれが許可されていると思ういけない、あなたがAzure AD Graph API経由でパスワードを変更することができます

+0

よくあるのは、Reset Password/Forgot Passwordポリシーが機能していることです。ユーザーがサインインした後、パスワードを変更できるようにします。 –

+0

Ahhは申し訳ありませんが誤解をおかけしましたが、パスワードを変更するというカスタムポリシーを作成することをお勧めします。これは、既にログインしているユーザーのオブジェクトIDを使用する場合を除き、RESETパスワードのように動作します。カスタムポリシーは、一度使い始めるとかなり簡単ですが、 – user1197563

関連する問題