IDM servisi sayesinde kullanıcılarınızın şifrelerini nasıl karmaşıklıkla oluşturmaları gerektiğine karar verebilirsiniz. IDM’in kullanıcıları şifrelerini oluştururken zorlayabildiği şifre karmaşıklıkları aşağıdaki gibidir.


  • Şifre, belirlenen minimum karakter kadar olması sağlanabilir.
  • İçerisinde en az bir adet özel karakter olması zorunluluğu sağlanabilir (^(?=.*\p{L})(?=.*\p{N})(?=.*[^\p{L}\p{N}]).{<minlength>,128}$).
  • Şifre içerisinde Türkçe karakterlerin olmasının önüne geçebilirsiniz.
  • En az bir büyük harf ve bir küçük harf zorunluluğu getirebilirsiniz.
  • Şifre içerisinde kullanıcının adı ve soyadı bilgilerini içermemesi kontrolünü koyabilirsiniz.
  • Şifre değiştirme esnasında en son belirtilen sayı kadar şifre ile aynı olmaması kontrolünü ekleyebilirsiniz.
  • Şifre zaman aşım süresi tanımlayabilir ve belirli süre sonunda kullanıcıların şifrelerini değiştirmelerine zorlayabilirsiniz.


Tüm bahsedilen politikaların kontrolü için IDM üzerinde api mevcuttur. Api Curl isteği aşağıdaki gibidir.

Curl isteği:


curl --location --request POST 'http://<idmadresi>/api/password/check' \
--header 'accept: application/json' \
--header 'client_id: <client_id>' \
--header 'client_secret: <client_secret>' \
--header 'Content-Type: application/json-patch+json' \
--data-raw '{ "Password": <password>}'


Response:


{
       "Success": false,
       "Message": "Şifre doğrulama işlemi başarısız.",
       "ErrorList": [

          {

               "ResultCode": "PAS_0005",

               "Message": "Belirlenen şifre en az bir büyük harf içermelidir. Lütfen farklı bir şifre belirleyiniz."

          },


          {

               "ResultCode": "PAS_0007",

               "Message": "Belirlenen şifre en az bir sayı içermelidir. Lütfen farklı bir şifre belirleyiniz."

           },


          {

               "ResultCode": "PAS_0008",

               "Message": "Belirlenen şifre en az bir özel karakter içermelidir. Lütfen farklı bir şifre belirleyiniz."

           }

      ]
}


Ayrıca, IDM'e yapılan şifre politikalarını doğrulama talebinden dönen bilgilerin anlamlandırılabilmesi için bir takım kodlar oluşturulmuştur. Şifre politika doğrulama talebi yapıldıktan sonra dönen response içerisinde yer alan "ResultCode" 'lar ve açıklamaları aşağıdaki gibidir.

ResultCode

Açıklama

PAS_0001

Şifre en az belirtilen uzunlukta olmalıdır.

PAS_0002

Şifre belirtilen şifre politikası kuralına uymalıdır. (^(?=.*\p{L})(?=.*\p{N})(?=.*[^\p{L}\p{N}]).{<minlength>,128}$)

PAS_0003

Belirlenen şifre içerisinde (ı, İ, ğ, Ğ, ö, Ö, ü, Ü, ş, Ş, ç, Ç) gibi karakterler olmamalıdır.

PAS_0004

Belirlenen şifre kullanıcının isimi ve soyadını içeremez.

PAS_0005

Belirlenen şifre en az bir büyük harf içermelidir.

PAS_0006

Belirlenen şifre en az bir küçük harf içermelidir.

PAS_0007

Belirlenen şifre en az bir sayı içermelidir.

PAS_0008

Belirlenen şifre en az bir özel karakter içermelidir.

PAS_0009

Şifreniz son n şifrenizden farklı olmalıdır.

PAS_0010

Eski şifrenizi n zaman sonra yeniden kullanabilirsiniz.

Bir kullanıcının şifresi değiştirilirken "/legacy/idp/api/password/change", "/api/legacy/idp/password/change" ve "/api/users/password" api uçları kullanılabilir. Ayrıca "/legacy/idp/api/password/change" ve "/api/legacy/idp/password/change" uçları kullanılarak süreçte kullanılan sonuç kodları elde edilebilir.

Curl isteği:


curl --location --request PUT 'http:/<idmadresi>/legacy/idp/api/password/change' \
--header 'client_id: <client_id>' \
--header 'client_secret: <client_secret>'  \
--header 'Content-Type: application/json-patch+json' \
--data-raw '{
"UserName": "<username>",
"OldPassword": "<oldpassword>",
"NewPassword": "<newpassword>"
}'


Başarılı Response:


{
    "CallStatus"0,
    "CallStatusText""",
    "CallStatusDetailText""",
    "CallResultCode""PC_0000",
    "CallStatusStr""OK"
}



Başarısız Response:


{
    "CallStatus"1,
    "CallStatusText""Enter your password",
    "CallStatusDetailText""NAFCore.Common.Types.Exceptions.NBadRequestException: Enter your password\n   at NAFCore.Common.Utils.Extensions.ExceptionExtensions.AddCustomDataIntoException(Exception exception, KeyValuePair`2 keyValuePair, Boolean throwException)\n   at NAFCore.Services.IDM.IDP.Service.Managers.IDPManager.<Internal_ChangePassword>d__138.MoveNext()\n--- End of stack trace from previous location where exception was thrown ---\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\n   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\n   at NAFCore.Services.IDM.IDP.Service.Managers.IDPManager.<ChangePassword>d__60.MoveNext()\n--- End of stack trace from previous location where exception was thrown ---\n   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\n   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\n   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\n   at NAFCore.Services.IDM.Controllers.API.LegacyIDPController.<ChangePassword>d__13.MoveNext()",
    "CallResultCode""PC_0001",
    "CallStatusStr""Error"
}



Ayrıca, IDM'e yapılan şifre değiştirme talebinden dönen bilgilerin anlamlandırılabilmesi için bir takım kodlar oluşturulmuştur. Şifre değiştirme talebi yapıldıktan sonra dönen response içerisinde yer alan "ResultCode" 'lar ve açıklamaları aşağıdaki gibidir.

ResultCode

Açıklama

PC_0000

Şifre değiştirme başarılı

PC_0001

Eski şifre gereklidir.

PC_0002

Yeni şifre gereklidir.

PC_0003

Eski şifre ve yeni şifre birbirinin aynısı olamaz.

PC_9999

Tanımlanamayan hata

NOT: Şifre değiştirme işlemi sırasında mevcut kullanıcının da tüm doğrulama işlemleri yeniden uygulandığı için Bu result_code'larının yanında kullanıcı token talebinde bulunurken dönen result_code'lar da dönmektedir. Token talebinde dönen result_code'lara BURADAN erişebilirsiniz. Bununla birlikte yeni şifre verilirken uygulanan bir takım şifre değiştirme politikaları mevcut. Yeni bir şifre elde etme adımında kullanıcı doğrulamaları yapıldıktan sonra alınmak istenen yeni şifre için de uygulanan şifre politikaları için ayrıca result_code'lar dönmektedir. Şifre politikaları kontrolünde dönen result_code'lara da BURADAN erişebilirsiniz.