Navigation

    SmartAPI Forum
    • Register
    • Login
    • Search
    • Categories
    • Popular
    • Groups
    • FAQs
    • API Docs

    Guide to secure your SmartAPI Account with two factor authentication

    General Discussion
    0
    104
    1955
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • punit
      punit @aj_Brk last edited by

      @aj_Brk Secret is time based one generated by local app or code using the secret key or QR code. It will be authenticated against the masterkey with AB servers. So it is possible

      A 1 Reply Last reply Reply Quote 0
      • punit
        punit @anil_patel last edited by

        @anil_patel You can generate using code locally . for example for Python, use pyotp package

        1 Reply Last reply Reply Quote 0
        • punit
          punit @ravitandur last edited by

          @ravitandur It is same API, so should be working. only extra totp need to be sent.

          1 Reply Last reply Reply Quote 0
          • A
            aj_Brk @punit last edited by

            @Ashok what i meant is you can't get this secret by just username and password as Anil is asking. One has to go to enable otp page to get this code one time.

            punit 1 Reply Last reply Reply Quote 0
            • punit
              punit @aj_Brk last edited by

              @aj_Brk correct

              1 Reply Last reply Reply Quote 0
              • A
                aj_Brk @mudit236 last edited by

                @babitakundu i guess you have to manually download the repo and run python setup.py install. I dont see the code yet updated on pip

                punit 1 Reply Last reply Reply Quote 0
                • punit
                  punit @aj_Brk last edited by

                  @aj_Brk Admins are adding in pip. If you want to try meanwhile, edit directly in local or download from github.

                  1 Reply Last reply Reply Quote 0
                  • M
                    Meenavenkit @babitakundu last edited by

                    @babitakundu just replace the generatesession def with new one. it worked for me. You have to manually edit in source file

                    1 Reply Last reply Reply Quote 0
                    • M
                      milind017 @aj_Brk last edited by

                      @aj_Brk code generated from "pyotp" not working for me, getting below output with your code. Any suggestion. If I am using the code from DUO app I am able to login successfully
                      data = obj.generateSession(clientCode, password, totp.now())
                      print(data)

                      Shell output:
                      pyotp: 586380
                      {'status': False, 'message': 'Invalid totp', 'errorcode': 'AB1050', 'data': None}

                      punit 1 Reply Last reply Reply Quote 0
                      • punit
                        punit @milind017 last edited by

                        @milind017 this need to do like this.

                        totp = pyotp.TOTP(s='secret key in qr uri after qr generation'

                        And then the generate session.

                        M 1 Reply Last reply Reply Quote 0
                        • M
                          milind017 @punit last edited by

                          @Ashok Yes did the same. Still getting the same
                          obj = SmartConnect(api_key=historyApiKey)

                          totp = pyotp.TOTP(s='secret key in qr uri after qr generation')
                          print("pyotp",totp.now())

                          attempts = 5
                          while attempts > 0:
                          attempts = attempts-1
                          data = obj.generateSession(clientCode, password, totp.now())
                          print(data)
                          if data['status']:
                          break
                          time.sleep(2)

                          A 1 Reply Last reply Reply Quote 0
                          • S
                            SSumit @gautamnaik1994 last edited by

                            @gautamnaik1994 https://smartapi.angelbroking.com/topic/2383/automate-totp-login-using-python-module-pyotp

                            M 1 Reply Last reply Reply Quote 0
                            • M
                              milind017 @SSumit last edited by

                              @SSumit
                              I have tried with shared link code, still getting the same
                              d83195c5-6672-4ec1-868a-4ee367253b3a-image.png

                              Shell Output:
                              with TOTP: 932310
                              With parse_uri: 932310
                              {'status': False, 'message': 'Invalid totp', 'errorcode': 'AB1050', 'data': None}

                              A punit S 3 Replies Last reply Reply Quote 0
                              • A
                                aj_Brk @milind017 last edited by

                                @milind017 I see that you have put condition in if data['status'] , is it going in retry at all ?

                                1 Reply Last reply Reply Quote 1
                                • A
                                  aj_Brk @milind017 last edited by

                                  @milind017 try with this condition

                                  if not data['message'].contains('Invalid totp'):
                                  break

                                  M 1 Reply Last reply Reply Quote 0
                                  • punit
                                    punit @milind017 last edited by

                                    @milind017 @aj_Brk why retry, it passed almost always on first time. Anyway. Not sure why parse_uri is needed.. also just pass totp as a string

                                    A M 2 Replies Last reply Reply Quote 1
                                    • G
                                      gokul last edited by

                                      TypeError: SmartConnect.generateSession() takes 3 positional arguments but 4 were given

                                      A G 2 Replies Last reply Reply Quote 1
                                      • A
                                        aj_Brk @punit last edited by

                                        @Ashok Actually you are right it works most of the time , but for those rare instances where by the time your request went and it expired on server side , i had added retry. It happened to me once perhaps due to slow code execution or internet.

                                        1 Reply Last reply Reply Quote 0
                                        • A
                                          aj_Brk @gokul last edited by

                                          @gokul try the latest library - pip install smartapi-python --upgrade . It appears the new version is live now

                                          1 Reply Last reply Reply Quote 0
                                          • A
                                            aj_Brk @mudit236 last edited by

                                            @mudit236 @babitakundu It appears it is updated now. Please try - pip install smartapi-python --upgrade

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post